【问题标题】:Rename column names by pattern [duplicate]按模式重命名列名[重复]
【发布时间】:2021-11-03 05:20:48
【问题描述】:

我想重命名我的列,因为它太长了,例如:

chrX:99883666-99894988_TSPAN6_ENSG00000000003.10TSPAN6

chrX:99839798-99854882_TNMD_ENSG00000000005.5TNMD

chr20:49505584-49575092_DPM1_ENSG00000000419.8DPM1

考虑到我要删除的元素与每列不同,我该如何重命名它?

【问题讨论】:

    标签: r regex dataframe rename


    【解决方案1】:

    使用strsplit我们可以试试:

    names(df) <- strsplit(names(df), "_")[[1]][2]
    

    如果您只想定位某个名称子集,则只需使用该逻辑过滤 names(df)

    【讨论】:

      【解决方案2】:

      您可以使用正则表达式来做到这一点。提取两个下划线之间的单词怎么样?

      x <- c("chrX:99883666-99894988_TSPAN6_ENSG00000000003.10", 
             "chrX:99839798-99854882_TNMD_ENSG00000000005.5", 
             "chr20:49505584-49575092_DPM1_ENSG00000000419.8")
      
      sub('.*?_(\\w+)_.*', '\\1', x)
      #[1] "TSPAN6" "TNMD"   "DPM1" 
      

      对于列的名称,您可以使用names(df) 而不是x

      names(df) <- sub('.*?_(\\w+)_.*', '\\1', names(df))
      

      如果你喜欢dplyr -

      library(dplyr)
      df <- df %>% rename_with(~sub('.*?_(\\w+)_.*', '\\1', .))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-31
        • 2020-09-29
        • 1970-01-01
        • 1970-01-01
        • 2018-04-15
        • 2014-01-26
        • 2020-12-11
        • 1970-01-01
        相关资源
        最近更新 更多