在此数据帧伪列表中,所有列名称均带有前缀,后跟下划线。列表中的每个数据帧都有一个不同的前缀,但是它们都包含一个下划线。
如何删除列表中所有数据框的列名中的下划线和之前的文本?我可以单独进行操作,但是我的实际列表包含更多数据帧。谢谢
#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))
答案 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, "^[^_]*_")))