问题
你想要给数据框的列重新命名。
方案
让我们从有三列的一个数据框开始:
d <- data.frame(alpha=1:3, beta=4:6, gamma=7:9)
d
#> alpha beta gamma
#> 1 1 4 7
#> 2 2 5 8
#> 3 3 6 9
names(d)
#> [1] "alpha" "beta" "gamma"
最简单的方式是使用plyr包的rename()
函数:
library(plyr)
rename(d, c("beta"="two", "gamma"="three"))
#> alpha two three
#> 1 1 4 7
#> 2 2 5 8
#> 3 3 6 9
如果你不想要依赖plyr包,你可以使用下面R内置的函数。注意这些直接修改了d
,意味着你不需要把结果保存回d
。
# 通过name函数重命名列:把"beta"改为"two"
names(d)[names(d)=="beta"] <- "two"
d
#> alpha two gamma
#> 1 1 4 7
#> 2 2 5 8
#> 3 3 6 9
# 你也可以通过位置索引改变名字,但这种操作会有点危险,一旦你以后对数据做出改变,这些操作可能就不适用了。
# 通过名字向量的位置索引重命名:改变第三项,将"gamma"改成"three"
names(d)[3] <- "three"
d
#> alpha two three
#> 1 1 4 7
#> 2 2 5 8
#> 3 3 6 9
也可以使用R的字符串搜索和替换函数来重命名列。注意alpha
周围的^
和$
是确保全部字符串匹配。没有他们的话,如果存在一个叫alphabet
的列也会匹配成功。
names(d) <- sub("^alpha$", "one", names(d))
d
#> one two three
#> 1 1 4 7
#> 2 2 5 8
#> 3 3 6 9
# 所有的列中,替换列名中的"t"为"X"
names(d) <- gsub("t", "X", names(d))
d
#> one Xwo Xhree
#> 1 1 4 7
#> 2 2 5 8
#> 3 3 6 9
# gsub()替换每个列名中所有的匹配项
# sub()只替换每个列名中匹配的第一项
网友评论