从多个csv文件导入数据集的问题

时间:2018-07-25 05:54:43

标签: r loops for-loop

我目前在Rstudio中遇到麻烦,无法从多个数据集中输出一个新的数据集,而又不能相互替换。最初,我在导入多个数据集时遇到问题,并且可以通过

来解决
dataFiles <- Sys.glob("*.csv")

但是我在不更改实际文件的情况下为这些数据集同时运行for循环时遇到了麻烦。

例如

for (file in dataFiles) {
  Data <- read.csv(file, sep = ",", header = T, skip = 2)
  } 

仅输出最后读取的文件,并清除所有先前的文件。

是否可以更改输出名称?

编辑:我当前的问题是我无法将数据保存在dataFiles中,它们全部被最后一个数据集替换。 for循环中的编码确实起作用。

1 个答案:

答案 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))将产生我们想要的。