r - 如何合并子文件夹中的 .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、...):
有没有可能像我上面提到的那样命名列?
解决方案
在这种情况下,该行:
names(listData) <- gsub("DistList.txt","",basename(fileList))
必须替换为
names(listData) <- basename(dirname(fileList))
以便将子文件夹的名称用作单个列的标题。
推荐阅读
- angular - ionic 4 + angular:routerLink 仅在第一次工作
- r - 有没有办法使用价格弹性度量在 R 中绘制总收入曲线?
- automation - 在 Ansible 剧本中,有什么更好的方法来迭代对象列表并根据该对象的数据调用不同的角色?
- kubernetes - 当应用程序在端口 80 上时,Kubernetes 负载均衡器重定向到 HTTPs
- powershell - 协助将列数据从 Import-CSV 拆分为多列
- xpath - 如何使用 xpath 获取包含单词的第一个标签?
- arrays - 字母矩阵中最长的连续路径
- html - 导航栏上方的 div 看起来不像预期的那样
- mysql - 需要加快 WHERE NOT EXISTS 查询
- javascript - D3.csv 读入 promise