如何使用子文件夹将.txt文件合并到子文件夹中并以与主文件夹相同的方式命名?

时间:2018-06-21 12:41:19

标签: r merge directory naming subdirectory

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

enter image description here

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

enter image description here

现在,我想合并这些.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等):

enter image description here

是否有可能如上所述命名列?

2 个答案:

答案 0 :(得分:0)

也许我误会了,但为什么不这么做

# Generate some sample data consisting of a list
# of single-column data.frame's
set.seed(2017);
listData <- list(
    C1 = data.frame(V1 = runif(10)),
    C2 = data.frame(V1 = runif(10)),
    C3 = data.frame(V1 = runif(10)))

setNames(bind_cols(listData), names(listData))
#           C1          C2         C3
#1  0.92424261 0.674331481 0.63411352
#2  0.53717641 0.002020766 0.37986744
#3  0.46919565 0.025093514 0.94207403
#4  0.28862618 0.432077786 0.75499369
#5  0.77008816 0.499391912 0.22761184
#6  0.77276871 0.388681932 0.91466603
#7  0.03932234 0.395375316 0.62044504
#8  0.43490560 0.715707325 0.31910458
#9  0.47216639 0.940999879 0.07628881
#10 0.27383312 0.827229161 0.26083932

说明:我们只需绑定data.frame中所有listData的单个列,并用setNames设置列名。

我不明白您为什么先做bind_rows,然后又从长到宽重铸。只需使用一个bind_cols就可以实现同样的目的。

答案 1 :(得分:0)

在这种情况下,该行:

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

必须替换为

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

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