【问题标题】:Rename group of consecutive columns efficiently in R在R中有效地重命名连续列组
【发布时间】:2021-02-01 17:48:56
【问题描述】:

我正在寻找一种有效的方法来重命名几列。

我有一个如下所示的数据框。

id  sdf  dir  fki 
1   3    4    2
2   5    2    1
3   4    1    2

我想重命名列 sdf、dir 和 fki。

我知道我可以这样做:

df <- df %>% 
rename(newname1 = sdf, 
       newname2 = dir, 
       newname3 = fki)

由于我拥有的列数量,键入我想要替换的列的名称需要很长时间。

理想情况下,我想创建一个带有名称的向量:

newcolumns <- c("newname1", "newname2", "newname3") 

然后指定这些应该替换数据框中的列名,从列 sdf 开始。有没有办法做到这一点?

【问题讨论】:

    标签: r tidyverse rename


    【解决方案1】:

    我们可以使用rename_at

    library(dplyr)
    df %>%
          rename_at(vars(-id), ~ newcolumns)
    

    -输出

    #   id newname1 newname2 newname3
    #1  1        3        4        2
    #2  2        5        2        1
    #3  3        4        1        2
    

    rename_with

    df %>%
       rename_with(~ newcolumns, -id)
    

    或者传递一个named 向量并在rename 中使用!!!

    df %>%
        rename(!!! setNames(names(df)[-1], newcolumns))
    

    或使用base R

    names(df)[-1] <- newcolumns
    

    数据

    df <- structure(list(id = 1:3, sdf = c(3L, 5L, 4L), dir = c(4L, 2L, 
    1L), fki = c(2L, 1L, 2L)), class = "data.frame", row.names = c(NA, 
    -3L))
    

    【讨论】:

    • 使用 rename_at(),我如何像使用基本 R 一样对列进行子集化?例如,如果我尝试对数据框中的 24:45 列执行此操作。
    • @melbez 只是df %&gt;% rename_at(24:45, ~ newcolumnnames)
    猜你喜欢
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多