代码之家  ›  专栏  ›  技术社区  ›  J.Con

删除数据帧列表中的部分列名称-R

  •  2
  • J.Con  · 技术社区  · 8 年前

    在这个数据帧的虚拟列表中,所有列名都有一个前缀,后跟一个下划线列表中的每个数据帧都有不同的前缀,但它们都包含下划线。

    如何删除列表中所有数据帧的列名中的下划线及其前面的文本?我可以单独做,但我的真实列表包含更多的数据帧。谢谢你

    #add diferent prefixes to all col names
    colnames(iris)<-paste('iris_',colnames(iris), sep='')
    
    colnames(mtcars)<-paste('mt_',colnames(mtcars), sep='')
    
    colnames(ToothGrowth)<-paste('TG_',colnames(ToothGrowth), sep='')
    
    #create list of data frames
    
    mylist<-list(iris, mtcars, ToothGrowth)
    
    #name elements of list
    
    names(mylist)<-c('iris','mtcars','ToothGrowth')
    
    #remove prefix from colnames individually for each data frame
    
    colnames(mylist['iris']$iris)<-sub('[^.]+\\_', '', colnames(mylist['iris']$iris))
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   akrun    8 年前

    我们可以利用 lapply 循环通过 list ,删除列名的前缀 sub ,并将名称设置为 setNames

    lapply(mylist, function(x) setNames(x, sub("^[^_]*_", "", names(x))))
    

    或使用 tidyverse ,循环通过 列表 具有 map 并删除列名的子字符串 str_remove 里面 rename_all

    library(tidyverse)
    map(mylist, ~  .x %>% 
                      rename_all(~ str_remove(.x, "^[^_]*_")))