Изменение имен столбцов, за исключением первых двух столбцов - PullRequest
0 голосов
/ 24 апреля 2018

Я пытаюсь изменить имена столбцов с помощью функции colnames () в R, но я хочу оставить первые два имени столбцов без изменений. Например,

    x <- c("A", "B", "C")
    x2 <- c( "D", "E", "F")
    ch <- c("G", "H", "I")
    ch2 <- c("J", "K", "L")
    ch3 <- c("M", "N", "O")

    df <- data.frame(x, x2, ch, ch2, ch3)

   x  x2  ch  ch2 ch3
1  A   D   G   J   M
2  B   E   H   K   N
3  C   F   I   L   O

Я просто хочу добавить "x_" перед этими столбцами, чтобы я использовал

colnames(df) <- paste("x", colnames(df), sep = "_")

, который изменит свои имена на

   x_x  x_x2  x_ch  x_ch2 x_ch3
1   A     D     G     J     M
2   B     E     H     K     N
3   C     F     I     L     O

со всеми именами столбцов, что я не хочу делать. Как я могу сохранить первые два имени столбца без изменений при изменении остальных имен столбцов? Я пробовал разные способы, но пока я могу сохранить только первые два имени столбцов без изменений, а остальные имена столбцов стерты. Если это возможно, я бы хотел использовать только dpylr или просто базовый R. Заранее спасибо!

Ответы [ 5 ]

0 голосов
/ 24 апреля 2018

Другая альтернатива в базе R: sub

> names(df) <- sub("(^ch.*)","x_\\1", names(df))
> df
  x x2 x_ch x_ch2 x_ch3
1 A  D    G     J     M
2 B  E    H     K     N
3 C  F    I     L     O
0 голосов
/ 24 апреля 2018

В базе R:

i <- startsWith(names(df),"ch")
names(df)[i] <- paste0("x_",names(df)[i])
#   x x2 x_ch x_ch2 x_ch3
# 1 A  D    G     J     M
# 2 B  E    H     K     N
# 3 C  F    I     L     O
0 голосов
/ 24 апреля 2018

Укажите начальный номер столбца для добавления строки:

x <- c("A", "B", "C")
x2 <- c( "D", "E", "F")
ch <- c("G", "H", "I")
ch2 <- c("J", "K", "L")
ch3 <- c("M", "N", "O")

df <- data.frame(x, x2, ch, ch2, ch3)

colnames(df)[3:ncol(df)] <- paste("x", colnames(df[3:ncol(df)]), sep = "_")

df
0 голосов
/ 24 апреля 2018

Мы могли бы использовать rename_at из dplyr

library(dplyr)
df %>% 
   rename_at(vars(matches("ch")), ~ paste0("x_", .))
#  x x2 x_ch x_ch2 x_ch3
#1 A  D    G     J     M
#2 B  E    H     K     N
#3 C  F    I     L     O
0 голосов
/ 24 апреля 2018

Вместо применения этой функции ко всем colnames используйте нотацию [], чтобы применить ее к подмножеству столбцов

colnames(df)[3:ncol(df)] <- paste("x", colnames(df)[3:ncol(df)], sep = "_")

И добро пожаловать в StackOverflow!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...