如何删除R中多个数据框中的某些列?

时间:2014-12-10 11:25:31

标签: r dataframe

假设我有许多数据框,其中包含几乎相似列的不同名称。如何使用循环(或任何其他方式)操纵各个数据框的列?例如,我想一次删除所有数据帧的第一列。

1 个答案:

答案 0 :(得分:6)

假设您有多个data.frames dat1dat2dat3等,而不是使用单个数据集,请将它们放在list中并进行处理。删除第一列后,如果仍需要原始data.frame对象来反映更改(不建议您可以在列表中进行所有分析),请使用list2env

 lst <- mget(ls(pattern='^dat\\d+'))
 list2env(lapply(lst,`[`,-1), envir=.GlobalEnv)

 dat1

如果您有不同的数据集名称D1C1datCnewDat等没有明确的共同模式(问题中不明确),那么您仍然可以手动创建列表(极端情况)

 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))