假设我有许多数据框,其中包含几乎相似列的不同名称。如何使用循环(或任何其他方式)操纵各个数据框的列?例如,我想一次删除所有数据帧的第一列。
答案 0 :(得分:6)
假设您有多个data.frames dat1
,dat2
,dat3
等,而不是使用单个数据集,请将它们放在list
中并进行处理。删除第一列后,如果仍需要原始data.frame
对象来反映更改(不建议您可以在列表中进行所有分析),请使用list2env
。
lst <- mget(ls(pattern='^dat\\d+'))
list2env(lapply(lst,`[`,-1), envir=.GlobalEnv)
dat1
如果您有不同的数据集名称D1
,C1
,datC
,newDat
等没有明确的共同模式(问题中不明确),那么您仍然可以手动创建列表(极端情况)
lst1 <- list(D1=D1, C1=C1, datc=datC, newDat=newDat)
并执行list2env(lapply(...
或者将所有文件(如果所有文件都在工作目录中)直接读入列表并进行处理。
files <- list.files() #if you want to read all the files in working directory
lst2 <- lapply(files, function(x) read.table(x, header=TRUE))
lapply(lst2,`[`,-1)
set.seed(24)
dat1 <- as.data.frame(matrix(sample(1:40, 5*3, replace=TRUE), ncol=5))
dat2 <- as.data.frame(matrix(sample(20, 3*5, replace=TRUE), ncol=3))
dat3 <- as.data.frame(matrix(sample(80, 2*10, replace=TRUE), ncol=2))