Manipulating Data - 重命名数据框的列

作者: 王诗翔 | 来源:发表于2017-12-21 14:05 被阅读22次

    问题

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

    方案

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

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

    相关文章

      网友评论

        本文标题:Manipulating Data - 重命名数据框的列

        本文链接:https://www.haomeiwen.com/subject/ekhawxtx.html