6.11 重命名数据框的列
6.11.1 问题
你想要给数据框的列重新命名。
6.11.2 方案
让我们从有三列的一个数据框开始:
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()
# 只替换每个列名中匹配的第一项