在数据框列表中删除部分列名-R

时间:2018-07-18 01:39:06

标签: r regex list dataframe

在此数据帧伪列表中,所有列名称均带有前缀,后跟下划线。列表中的每个数据帧都有一个不同的前缀,但是它们都包含一个下划线。

如何删除列表中所有数据框的列名中的下划线和之前的文本?我可以单独进行操作,但是我的实际列表包含更多数据帧。谢谢

#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 个答案:

答案 0 :(得分:2)

我们可以使用lapply遍历list,使用sub删除列名称的前缀,并使用setNames设置名称。

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

或使用tidyverse,在list中循环访问map,并在str_remove内使用rename_all删除列名称的子字符串

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