【问题标题】:Iterate through folder hierarchy遍历文件夹层次结构
【发布时间】:2013-02-27 13:18:32
【问题描述】:

我有一个文件夹 (my_files),其中包含大约 1000 个文件夹。这 1000 个文件夹中的每一个都有 6 个 csv 文件。我想通过聚合每个目录的这 6 个 csv 来获得 1000 个 csv 文件。

我有以下代码:

files<-list.files("/Users/me/Desktop/my_files")
for (i in files)
{
         //open each directory in "files"
        //aggregate all csvs in the directory into one
       //name of the aggregated csvs should be the name of the folder they were inside of
}

我正在尝试使用类似的东西:

for (i in files)
{
    files2<-list.files("/Users/me/Desktop/my_files/"i)
}

列出 my_files 目录中的文件,但显然这是错误的语法。

【问题讨论】:

  • 如果您只想获取生成的 CSV 文件,那么 Bash 可能是比 R 更好的工具。
  • 我想将不同目录中的所有 csv 文件聚合为一个。例如。 my_files/xxx 文件夹有 6 个 csv 文件,我想最终得到一个 xxx.csv 文件,它是所有 6 个 csv 文件放在一起的。我可以在 R 中一个一个地做到这一点,但是对于这么多的目录来说这太过分了。我对 bash 了解不多,你认为我应该用谷歌在 bash 中做这样的事情吗?有什么具体的命令会有所帮助吗?
  • BASH 是标准的 Linux 命令外壳。
  • 等等。您是想仅合并 R 中的 CSV 数据,还是需要这些文件用于其他用途?
  • @demt 根据您的文件的组织方式,它可以像 Bash 中的 for folder in my_files/*; do cat "$folder"/*.csv &gt; "$folder.csv"; done 一样简单。

标签: r


【解决方案1】:

我创建了一个名为my_files 的文件夹,并在其中填充了folder1folder2folder3。每个文件夹都包含一个带有隐藏消息的 file1.txt。让我们看看这些消息读到了什么。匿名函数可以适应读取所有文件并将它们组合起来。我会让你完成这项任务。

# I've created a folder "my_files" that is...
setwd("q:/my_files")

# populated by three subfolders
thousand.folders <- list.dirs(full.names = TRUE)

result <- sapply(thousand.folders[-1], function(x) {
  file <- list.files(x, full.names = TRUE)  
  message(readLines(file))
})

file1 in folder1
file1 in folder2
file1 in folder3

【讨论】:

  • 我仍然不确定如何完成这项工作......我的结果如下所示:$./9980072 [1] "./9980072/data_B_2012_08.csv" "./9980072/data_B_2012_09. csv" "./9980072/data_B_2012_10.csv" "./9980072/data_B_2012_11.csv" [5] "./9980072/data_B_2012_12.csv" "./9980072/data_B_2013_01.csv" 所以,我在 my_files 中有目录,这是/9980072,其中我有csv文件,我想合并这些csv文件并将这些合并的csv文件命名为目录的名称,在本例中为9980072.csv
猜你喜欢
  • 2012-04-21
  • 1970-01-01
  • 1970-01-01
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多