递归读取csv文件并在两个文件上执行计算

时间:2019-05-27 19:08:30

标签: r

我有一个要导入,执行计算并保存结果的文件列表。

我有几个文件夹,标签如下:

200520062007 ... 2018

文件另存为:

file_2005.csvfile_2006.csvfile_2007.csv ... file_2018.csv

(每个文件夹一个文件)

我正在尝试编写将执行以下操作的函数:

  • 分别从文件夹file_2005.csvfile_2006.csv中读入20052006
  • 对这两个数据集进行一些清洗,处理和一些计算。
  • 保存结果。

-从文件夹file_2006.csvfile_2007.csv中读入2006,现在读入2007。 -执行与之前相同的计算。 -保存结果。

---从文件夹file_2007.csvfile_2008.csv中读取20072008

---执行相同的计算

---保存结果。

等...

所以我想知道如何递归创建这样的函数,该函数实质上读取所有数据并处理结果。

这些年来,我在一起阅读时都会遇到记忆问题。

1 个答案:

答案 0 :(得分:0)

列出文件

LF <- list.files(path="Years",pattern=".csv",full.names=T,recursive=T)

创建一个包含两列的data.frame-1的年份减去最后一年的年份,另一列的所有年份都减去第一行的

data <- data.frame(V1=LF[-c(length(LF))])
data$V2 <- LF[-c(1)]

然后按行划分为数据帧列表

li <- split(data, seq(nrow(data)))

然后读入每行中的两个文件(即,第1列中的一年,第2列中的下一年)。使用lapply进行此操作,您还可以在其中应用函数f(x)并编写csv输出。使用sprintf自定义文件名

RF <- lapply(li, function(x) {
  dat1 <- read.csv(as.character(x$V1))
  dat2 <- read.csv(as.character(x$V2))
  ndat1 <- f(dat1)
  ndat2 <- f(dat2)
  write.csv (ndat1, sprintf("new_%s",x$V1))
  write.csv (ndat2, sprintf("new_%s",x$V2))
})