【问题标题】:recursively read in csv files and perform calculation on two files递归读取csv文件并对两个文件进行计算
【发布时间】:2019-05-28 06:14:42
【问题描述】:

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

我有几个文件夹标记如下:

200520062007...2018

文件保存为:

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

(每个文件夹一个文件)

我正在尝试编写一个函数来执行以下操作:

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

-- 从文件夹 20062007 中读取 file_2006.csv 和现在的 file_2007.csv。 -- 执行与以前相同的计算。 -- 保存结果。

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

--- 执行相同的计算

--- 保存结果。

等等……

所以我想知道如何递归地创建这样一个函数,它本质上是读取所有数据并处理结果。

当我多年来一起阅读时,我会出现记忆问题。

【问题讨论】:

  • frames <- sapply(list.files(path, pattern="*.csv", full.names=TRUE. recursive=TRUE), read.csv, simplify = FALSE),处理每一帧,然后类似于Map(function(x,fn) write.csv(x, fn, row.names=FALSE), frames, names(frames))

标签: r


【解决方案1】:

列出文件

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 输出。我使用过 @ 987654325@自定义文件名

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    相关资源
    最近更新 更多