【问题标题】:How to rename all columns between two sets of columns in a dataframe using R?如何使用 R 重命名数据框中两组列之间的所有列?
【发布时间】:2021-05-26 02:15:10
【问题描述】:

假设我对跨多个数据集重命名列感兴趣。需要重命名的列因名称和位置而异,因此不能这样选择。但是,我要重命名的列之前的列和之后的列是不变的。

例如,假设mtcars 中的mpgcyl 列始终是前两列,它们的名称永远不会改变。 vs:carb 列类似,但它们的位置会根据在它们之前添加的列数(但在 cyl 之后)而变化。但是,hp:qsec 中的变量名称会发生​​变化,有时会在它们之间添加一个新变量。

假设我想将单词'_Value' 附加到位于cyl 之后和vs 之前的每一列的末尾。我该怎么做,最好使用dplyr

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    你可以试试-

    library(dplyr)
    
    mtcars %>%
      rename_with(~paste0(., '_Value'), -c(mpg:cyl, vs:carb)) %>%
      head
    
    #                   mpg cyl disp_Value hp_Value drat_Value wt_Value qsec_Value vs am gear carb
    #Mazda RX4         21.0   6        160      110       3.90    2.620      16.46  0  1    4    4
    #Mazda RX4 Wag     21.0   6        160      110       3.90    2.875      17.02  0  1    4    4
    #Datsun 710        22.8   4        108       93       3.85    2.320      18.61  1  1    4    1
    #Hornet 4 Drive    21.4   6        258      110       3.08    3.215      19.44  1  0    3    1
    #Hornet Sportabout 18.7   8        360      175       3.15    3.440      17.02  0  0    3    2
    #Valiant           18.1   6        225      105       2.76    3.460      20.22  1  0    3    1
    

    如果您在数据中有其他列并且要在 cylvs 之间重命名这些列,您可以这样做 -

    start <- match('cyl', names(mtcars))
    end <- match('vs', names(mtcars))
    cols <- (start + 1):(end - 1)
    names(mtcars)[cols] <- paste0(names(mtcars)[cols], '_Value')
    

    【讨论】:

    • 这很有帮助,谢谢。我受到旧版本 dplyr 的限制。我可以使用rename_with 的替代品吗?
    • 是的,您可以在旧版本中使用rename_at - mtcars %&gt;% rename_at(vars(-c(mpg:cyl, vs:carb)), ~paste0(., '_Value'))
    猜你喜欢
    • 2022-11-07
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 2021-02-16
    • 2015-12-29
    • 2021-04-18
    相关资源
    最近更新 更多