【问题标题】:To stack up results in one masterfile in R在 R 中将结果堆叠到一个主文件中
【发布时间】:2016-02-24 09:15:34
【问题描述】:

使用this script,我为每个 csv 文件创建了一个特定文件夹,然后将所有进一步的分析结果保存在该文件夹中。文件夹的名称和 csv 文件的名称相同。 csv 文件存储在 main/master 目录中。 现在,我在每个文件夹中创建了一个 csv 文件,其中包含所有拟合值的列表。

我现在想做以下事情:

  1. 将工作目录设置为特定的文件名
  2. 读取拟合值文件
  3. 添加行/列说明站点名称/唯一 ID
  4. 将其添加到主目录中存储的主文件中,并带有指定站点名称/文件名的标题。它可以按行或按列堆叠,这并不重要。
  5. 来到主目录选择下一个文件
  6. 重复循环

使用merge()rbind()cbind() 将所有数据组合在一个列名下。我想将所有网站分开,以便稍后进行比较。

这是我目前正在使用的,我不知道如何进一步进行。

setwd( "path")  # main directory
path <-"path"  # need this for convenience while switching back to main directory

# import all files and create a character type array
files <- list.files(path=path, pattern="*.csv")

for(i in seq(1, length(files), by = 1)){

      fileName <- read.csv(files[i]) # repeat to set the required working directory
      base <- strsplit(files[i], ".csv")[[1]]   # getting the filename
      setwd(file.path(path, base))   # setting the working directory to the same filename
      master <- read.csv(paste(base,"_fiited_values curve.csv"))
    # read the fitted value csv file for the site and store it in a list
    }

我想构建一个 for 循环来制作一个包含不同目录中的文件的主文件。我不想将所有内容合并到一个列名下。

例如,如果我有 50 个类似的 csv 文件,每个文件有两列数据,我希望有一个 csv 文件来容纳所有这些;但以其原始格式而不是附加到现有的行/列。那么我将有 100 列数据。

请告诉我我可以提供哪些进一步的信息?

【问题讨论】:

  • 你的问题是什么

标签: r csv for-loop merge data.table


【解决方案1】:

用于从多个不同目录中读取一组文件,路径名pathapathbpathc

paths = c('patha','pathb','pathc')
files = unlist(sapply(paths, function(path) list.files(path,pattern = "*.csv", full.names = TRUE)))

listContainingAllFiles = lapply(files, read.csv)

如果您想快速了解它,可以从 data.table 中获取 fread:

library(data.table)
listContainingAllFiles = lapply(files, fread)

无论哪种方式,这都会为您提供所有对象的列表,并单独保存。如果您想将它们垂直/水平连接在一起,那么:

do.call(rbind, listContainingAllFiles)
do.call(cbind, listContainingAllFiles)

编辑:注意,后者没有意义,除非你的行在它们对应时确实有意义。只创建一个字段来跟踪数据的来源更有意义。

如果您想包含文件名作为确定样本位置的方法(在您的示例中我看不到您从哪里获取此信息),那么您希望在阅读文件,所以:

listContainingAllFiles = lapply(files, 
                            function(file) data.frame(filename = file,
                                                      read.csv(file)))

然后您可以拆分该列以获取您的详细信息(当然假设您有一个标准的命名约定)

【讨论】:

  • 这绝对是一个比我正在做的更快的解决方案。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
相关资源
最近更新 更多