【问题标题】:r rename column names to include 0sr 重命名列名以包含 0
【发布时间】:2021-11-29 09:20:38
【问题描述】:

这是我的数据集

Id   Date        Col_a_1 Col_a_2 Col_a_3 Col_a_12 Col_a_65
1    02/19/2020  0        1       2       0        4
2    02/10/2020  1        2       0       1        3
1    03/11/2020  2        1       3       1        0
4    10/29/2020  1        0       2       1        0

我喜欢在以 1,2,3 结尾的列名中添加 0

最终预期的数据集是具有这些列名的数据集

Id   Date        col_b_01  col_b_02 col_b_03 col_b_12 col_a_65
1    02/19/2020  0         1        2        0        4
2    02/10/2020  1         2        0        1        3
1    03/11/2020  2         1        3        1        0
4    10/29/2020  1         0        2        1        0

虽然我可以单独重命名它们,但我喜欢更有效地执行此操作,但不知道如何操作。任何建议都非常感谢。提前致谢。

【问题讨论】:

    标签: r string dplyr multiple-columns rename


    【解决方案1】:

    您可以在rename_with 中使用str_replace -

    library(dplyr)
    library(stringr)
    
    df %>%
      rename_with(~str_replace(., '\\d+', function(m) sprintf('%02s', m)), 
                  starts_with('Col'))
    
    #  Id       Date Col_a_01 Col_a_02 Col_a_03 Col_a_12 Col_a_65
    #1  1 02/19/2020        0        1        2        0        4
    #2  2 02/10/2020        1        2        0        1        3
    #3  1 03/11/2020        2        1        3        1        0
    #4  4 10/29/2020        1        0        2        1        0
    

    数据

    df <- structure(list(Id = c(1L, 2L, 1L, 4L), Date = c("02/19/2020", 
    "02/10/2020", "03/11/2020", "10/29/2020"), Col_a_1 = c(0L, 1L, 
    2L, 1L), Col_a_2 = c(1L, 2L, 1L, 0L), Col_a_3 = c(2L, 0L, 3L, 
    2L), Col_a_12 = c(0L, 1L, 1L, 1L), Col_a_65 = c(4L, 3L, 0L, 0L
    )), class = "data.frame", row.names = c(NA, -4L))
    

    【讨论】:

    • @Ronak Shah:用你的代码我得到`Id Date Col_a_ 1 Col_a_ 2 Col_a_ 3 Col_a_12 Col_a_65`。有什么问题?
    • 奇怪。我不知道。我使用 dput 添加了数据,我使用过并为我工作。
    • 我是用你提供的数据做的。结果相同。我将更新并重新启动 R 并重试。
    【解决方案2】:
    names(dat)[3:7]
    # [1] "Col_a_1"  "Col_a_2"  "Col_a_3"  "Col_a_12" "Col_a_65"
    gsub("_([0-9])$", "_0\\1", names(dat)[3:7])
    # [1] "Col_a_01" "Col_a_02" "Col_a_03" "Col_a_12" "Col_a_65"
    names(dat)[3:7] <- gsub("_([0-9])$", "_0\\1", names(dat)[3:7])
    dat
    #   Id       Date Col_a_01 Col_a_02 Col_a_03 Col_a_12 Col_a_65
    # 1  1 02/19/2020        0        1        2        0        4
    # 2  2 02/10/2020        1        2        0        1        3
    # 3  1 03/11/2020        2        1        3        1        0
    # 4  4 10/29/2020        1        0        2        1        0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-09
      • 2023-02-02
      • 1970-01-01
      • 1970-01-01
      • 2022-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多