更改列名除前两列外

时间:2018-04-24 17:01:46

标签: r dplyr

我正在尝试使用R中的colnames()函数更改列名,但我希望保持前两个列名不变。例如,

    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

我只想添加&#34; x _&#34;在这些列的前面,所以我会使用

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 :(得分:4)

我们可以使用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

答案 1 :(得分:2)

不是将该函数应用于所有colnames,而是使用[]表示法将其应用于列的子集

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

欢迎来到StackOverflow!

答案 2 :(得分:1)

指定起始列号以添加字符串:

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

答案 3 :(得分:1)

在基地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

答案 4 :(得分:1)

R base中的另一个替代方案: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