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()只替换每个列名中匹配的第一项
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,270评论 0 4
  • 1、引言 数据库设计过程中表、字段等的命名规范也算是设计规范的一部分,不过设计规范更多的是为了确保数据库设计的合理...
    SnowflakeCloud阅读 41,090评论 0 48
  • 第一章 计算机系统漫游 计算机系统是由硬件和系统软件组成的,它们共同协作以运行应用程序。操作系统硬件组成图: 操作...
    0b9925fc4501阅读 364评论 0 1
  • 此篇我将罗列出iOS开发中,Xcode编译器出现的常见错误,警告视同为错误处理。(序号只做排序用) 1.死存储问题...
    小唐羽锋阅读 6,579评论 12 211
  • 我也不是喜欢迟到,可就是戒不掉啊。 迟到这种现象在我们生活中早已司空见惯了。上学迟到,上班迟到,约会迟到等。 每次...
    酱小粒阅读 456评论 4 5