首页 > 解决方案 > 如何合并子文件夹中的 .txt 文件并以与使用 R 的主文件夹相同的方式命名它们?

问题描述

我在不同的条件下做了一个实验。这些条件中的每一个都有自己的文件夹。在每个文件夹中,每个副本都有一个子文件夹,其中包含一个名为 DistList.txt 的文本文件。然后看起来像这样,其中文件夹“C1.1”、“C1.2”等包含提到的 .txt 文件:

在此处输入图像描述

这些 .txt 文件看起来像这样,但它们的长度可能只有一两个到数百个不等:

在此处输入图像描述

现在,我想合并这些 .txt 文件并从中创建一个 .csv 文件,如下所示:

C1.1  C1.2  C1.3  ...
155   223   996
169   559   999
259   623   1033
2003        2220
4421

到目前为止,我能够编写一个脚本,将所有文件放在一起并将单个数据绘制在不同的列中,就像我想要的那样。但是,我希望每列的标题是我提取 .txt 文件的主文件夹的名称(例如 C1.1、C1.2、C1.3、C2.1、...)。

到目前为止,我有这个脚本:

fileList <- list.files(path = ".", recursive = TRUE, pattern = "DistList.txt", full.names = TRUE)

listData <- lapply(fileList, read.table)

names(listData) <- gsub("DistList.txt","",basename(fileList))

library(tidyverse)
library(reshape2)

bind_rows(listData, .id = "FileName") %>%
  group_by(FileName) %>%
  mutate(rowNum = row_number()) %>%
  dcast(rowNum~FileName, value.var = "V1") %>%
  select(-rowNum) %>%
  write.csv(file="Result.csv")

然后生成一个像这样的 .csv 文件,其中只有数字作为列标题,而不是我想要的名称。这是创建的文件的摘录,我在其中标记了应包含上述标题的行(C1.1、C1.2、C1.2、...):

在此处输入图像描述

有没有可能像我上面提到的那样命名列?

标签: rmergedirectorynamingsubdirectory

解决方案


在这种情况下,该行:

names(listData) <- gsub("DistList.txt","",basename(fileList))    

必须替换为

names(listData) <- basename(dirname(fileList))

以便将子文件夹的名称用作单个列的标题。


推荐阅读