Manipulating Data - 重命名数据框的列

问题

你想要给数据框的列重新命名。

方案

让我们从有三列的一个数据框开始:

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()只替换每个列名中匹配的第一项
    原文作者:王诗翔
    原文地址: https://www.jianshu.com/p/b19c40586ae2
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞