我正在尝试使用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.谢谢你提前!
答案 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