【问题标题】:How to rename only certain columns names in a data.frame by adding a prefix? [duplicate]如何通过添加前缀仅重命名 data.frame 中的某些列名称? [复制]
【发布时间】:2020-01-05 04:57:15
【问题描述】:

我有一个这样的data.frame

df = data.frame(
  do_not_rename = 1:3,
  rename1 = 1:3,
  rename2 = 1:3)

假设我只想通过在前面添加“完成”将那些以 "rename" 开头的名称重命名为 "finished_renamex"

我该怎么做?想象一下,如果我有数千个变量。

【问题讨论】:

    标签: r


    【解决方案1】:

    使用dplyr::rename_atstart_with 助手

    library(dplyr)
    df %>% rename_at(vars(starts_with('rename')), ~paste0('finished_',.))
    
      do_not_rename finished_rename1 finished_rename2
    1             1                1                1
    2             2                2                2
    3             3                3                3
    

    使用基础 R

    colnames(df)[grep('^rename',names(df))] <- paste0('finished_',grep('^rename',names(df), value = TRUE))
    

    【讨论】:

      【解决方案2】:

      在base R中,我们可以使用startsWith来识别以前缀开头的列名

      inds <- startsWith(names(df), "rename")
      #Or grep
      #inds <- grep("^rename", names(df))
      names(df)[inds] <- paste0("finished_", names(df)[inds])
      
      df
      #  do_not_rename finished_rename1 finished_rename2
      #1             1                1                1
      #2             2                2                2
      #3             3                3                3
      

      【讨论】:

        【解决方案3】:

        在一行中,您可以使用gsub 完成此操作

         names(df) <- gsub('^rename(.)','finished_rename\\1', names(df))
        
         names(df)
         [1] "do_not_rename"    "finished_rename1" "finished_rename2"
        

        如果您有超过 9 个这样编号的列,您应该在 . 之后使用 + 字符

         names(df) <- gsub('^rename(.+)','finished_rename\\1', names(df))
        

        一般来说,gsub 是可行的方法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-10-08
          • 1970-01-01
          • 2021-04-02
          • 1970-01-01
          • 1970-01-01
          • 2012-06-18
          • 1970-01-01
          相关资源
          最近更新 更多