【问题标题】:Read, process and export analysis results from multiple .csv files in R从 R 中的多个 .csv 文件读取、处理和导出分析结果
【发布时间】:2014-04-11 22:05:30
【问题描述】:

我有一堆 CSV 文件,我想对每个文件中的数据执行相同的分析(在 R 中)。首先,我假设每个文件都必须读入 R(而不是在 CSV 上运行函数并提供输出,如 sed 脚本)。

将大量 CSV 文件输入到 R 以执行分析然后为每个输入输出单独的结果的最佳方法是什么?

谢谢(顺便说一句,我是一个完整的 R 新手)

【问题讨论】:

  • 我建议使用for 循环:)
  • 我会建议一个函数,也许可以从 for 循环中调用它;-)

标签: r csv


【解决方案1】:

您可以选择肖恩的选择,但这会导致几个问题:

  1. 您最终会在环境中得到许多不相关的对象,它们的名称与它们所属的文件相同。这是一个问题,因为...
  2. for 循环可能会非常慢,而且因为你有一大堆不相关的对象,你将不得不依赖 for 循环来处理每个后续分析的文件名 - 否则,到底是怎么回事您要记住对象的名称以便您可以调用它们吗?
  3. 通过将对象的名称粘贴为字符串来调用对象(您必须这样做,因为再一次,您对对象调用的唯一记录是在此字符串列表中)真的很痛苦。当您无法在代码中写入对象名称时,您是否曾尝试调用对象?我有,这太可怕了。

使用lapply() 可能会更好。

# List files
filelist <- list.files(pattern = "*.csv")

# Now we use lapply to perform a set of operations 
#   on each entry in the list of filenames.
to_dispose_of <- lapply(filelist, function(x) {

    # Read in the file specified by 'x' - an entry in filelist
    data.df <- read.csv(x, skip = 1, header = TRUE)

    # Store the filename, minus .csv. This will be important later.
    filename <- substr(x = x, start = 1, stop = (nchar(x)-4))

    # Your analysis work goes here. You only have to write it out once 
    #   to perform it on each individual file.
    ...

    # Eventually you'll end up with a data frame or a vector of analysis 
    #   to write out. Great! Since you've kept the value of x around, 
    #   you can do that trivially
    write.table(x = data_to_output, 
                file = paste0(filename, "_analysis.csv"), 
                sep = ",")
})

完成了。

【讨论】:

  • 您可以创建一个空的输出文件(在函数之外),然后在write.table 调用中使用append = TRUE 并将所有结果收集到一个文件中。
  • 然而,测试是“为每个文件输出单独的结果”
  • @Ironholds 嗯,恐怕这不走运。 "function(x)" 是字面意思吗?另外,是否缺少括号?我看不到lapply(filelist 的结束括号来自哪里。再次抱歉新手问题。谢谢。
  • 哦,我的错;失踪),是的。 function(x) 应该按字面意思理解——它是一个“匿名”函数(其他语言的程序员可能知道它是一个“lambda 函数”)
【解决方案2】:

您可以尝试以下代码,将所有csv文件放在同一目录中。

names = list.files(pattern="*.csv")   %csv file names
for(i in 1:length(names)){ assign(names[i],read.csv(names[i],skip=1, header=TRUE))}

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 2012-10-18
    • 2020-10-18
    • 2019-09-10
    相关资源
    最近更新 更多