【发布时间】:2016-09-25 19:35:39
【问题描述】:
我正在尝试从已导入的 20 多个数据框中删除列。但是,当我尝试遍历所有这些文件时出现错误。当我对单个文件名进行硬编码时,我可以放弃,但是一旦我尝试遍历所有文件,就会出现错误。代码如下:
path <- "C://Home/Data/"
files <- list.files(path=path, pattern="^.file*\\.csv$")
for(i in 1:length(files))
{
perpos <- which(strsplit(files[i], "")[[1]]==".")
assign(
gsub(" ","",substr(files[i], 1, perpos-1)),
read.csv(paste(path,files[i],sep="")))
}
mycols <- c("test," "trialruns," "practice")
`file01` = `file01`[,!(names(`file01`) %in% mycols)]
因此,上述内容将起作用并从 file01 中删除这三列。但是,我无法遍历 files02 到 files20 并从所有列中删除列。有任何想法吗?非常感谢!
【问题讨论】:
-
使用 lapply,将所有数据框保存在一个列表中。例如,请参阅此post。
-
欢迎来到 SO!我们要求您提供一个可重现的示例,而不是在 R 标签中引用您计算机上的文件(您可以使用内置数据集或通过
dput()共享您的代码)。 -
我认为使用
setwd(path)和list.files(path = ".", pattern = "^.file.\\csv$", full.names = TRUE)也会让你的生活更轻松 -
非常感谢您的回复。 @ zx8754,我正在尝试做:lapply(文件,子集,选择= mycols),但收到一个错误,“缺少参数”子集,没有默认值“。知道可能是什么问题吗?
-
可能更像 lapply(files, function(x, selcols){x[,selcols]}, mycols)
标签: r file loops subset multiple-columns