我目前在Rstudio中遇到麻烦,无法从多个数据集中输出一个新的数据集,而又不能相互替换。最初,我在导入多个数据集时遇到问题,并且可以通过
来解决dataFiles <- Sys.glob("*.csv")
但是我在不更改实际文件的情况下为这些数据集同时运行for循环时遇到了麻烦。
例如
for (file in dataFiles) {
Data <- read.csv(file, sep = ",", header = T, skip = 2)
}
仅输出最后读取的文件,并清除所有先前的文件。
是否可以更改输出名称?
编辑:我当前的问题是我无法将数据保存在dataFiles中,它们全部被最后一个数据集替换。 for循环中的编码确实起作用。
答案 0 :(得分:1)
我们可以按照注释中的建议使用lapply()
,这将返回一个列表。
Data <- lapply(dataFiles, read.csv)
我们可以根据工作目录中文件的名称为列表元素命名:
names(Data) <- sub("*.csv", "", dataFiles)
或者如@Axeman建议使用tools::file_path_sans_ext
names(Data) <- tools::file_path_sans_ext(dataFiles)
如果我们希望元素分别出现在全局环境中,请使用list2env()
。
list2env(Data, globalenv())
如果我们要将其完全包装到一个函数中,则可以执行以下操作:
importCsv <- function(x) {
Data <- setNames(lapply(x, read.csv), sub("*.csv", "", x))
return(list2env(Data, globalenv()))
}
最后importCsv(Sys.glob("*.csv"))
(或分别为importCsv(dataFiles)
)将产生我们想要的。