【问题标题】:Rename all column names that include a certain string重命名包含某个字符串的所有列名
【发布时间】:2021-09-07 19:42:17
【问题描述】:

假设我有一个包含 6 列的数据集,我想通过字符串“number_likes”替换列名称中的字符串,包括字符串“likes_comment”。

示例数据:

da = data.frame(likes_comment_1 = c(1,2,3,4), likes_comment_2 = c(2,2,3,1), likes_comment_3=c(5,2,3,1), quotes_comment1=c(2,1,3,4), quotes_comment2_=c(3,5,7,1), quotes_comment3=c(2,3,1,2))

da
  likes_comment_1 likes_comment_2 likes_comment_3 quotes_comment1 quotes_comment2_ quotes_comment3
1               1               2               5               2                3               2
2               2               2               2               1                5               3
3               3               3               3               3                7               1
4               4               1               1               4                1               2

目标数据:

target_da = data.frame(number_likes_1 = c(1,2,3,4), number_likes_2 = c(2,2,3,1), number_likes_3=c(5,2,3,1), quotes_comment1=c(2,1,3,4), quotes_comment2_=c(3,5,7,1), quotes_comment3=c(2,3,1,2))

target_da
  number_likes_1 number_likes_2 number_likes_3 quotes_comment1 quotes_comment2_ quotes_comment3
1              1              2              5               2                3               2
2              2              2              2               1                5               3
3              3              3              3               3                7               1
4              4              1              1               4                1               2

我该怎么做?

【问题讨论】:

    标签: r string dplyr data.table


    【解决方案1】:

    这行得通吗:

    names(da)[grepl('likes_comment',names(da))] <- gsub('likes_comment','number_likes',names(da)[grepl('likes_comment',names(da))])
    da
      number_likes_1 number_likes_2 number_likes_3 quotes_comment1 quotes_comment2_ quotes_comment3
    1              1              2              5               2                3               2
    2              2              2              2               1                5               3
    3              3              3              3               3                7               1
    4              4              1              1               4                1               2
    

    【讨论】:

      【解决方案2】:

      使用sub:

      names(da) <- sub("likes_comment_(\\d+)", "number_likes_\\1", names(da))
      

      【讨论】:

        【解决方案3】:

        你可以使用rename_with -

        library(dplyr)
        library(stringr)
        
        da %>% rename_with(~str_replace(., 'likes_comment', 'number_likes'))
        
        #  number_likes_1 number_likes_2 number_likes_3 quotes_comment1
        #1              1              2              5               2
        #2              2              2              2               1
        #3              3              3              3               3
        #4              4              1              1               4
        
        #  quotes_comment2_ quotes_comment3
        #1                3               2
        #2                5               3
        #3                7               1
        #4                1               2
        

        【讨论】:

          【解决方案4】:

          由于 OP 被标记为data.table

          library(data.table)
          setnames(da, sub('likes_comment', 'number_likes', names(da), fixed = TRUE))
          

          【讨论】:

            猜你喜欢
            • 2022-07-19
            • 1970-01-01
            • 2023-02-02
            • 1970-01-01
            • 2022-09-28
            • 2017-12-06
            • 2023-03-10
            • 2014-05-25
            • 2019-12-27
            相关资源
            最近更新 更多