6.11 重命名数据框的列

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()
## 只替换每个列名中匹配的第一项