首页 > 解决方案 > 如何使用 R 将合并文档中的列标题替换为文件目录?

问题描述

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

在此处输入图像描述

我现在已经设法使用以下脚本合并所有这些单个 DistList.txt 文件:

setwd("~/Desktop/Experiment/.")

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 文件,其中只有一个标题编号(标记为红色),这对我来说不是那么有用,如下图所示:

在此处输入图像描述

我宁愿拥有“DistList.txt”文件的目录,或者更好的是只有它们所在的文件夹的名称作为标题。我认为我可以使用函数list.dirs()and来做到这一点colnames,但不知何故我没有设法让它工作。

如果有人可以帮助我解决这个问题,我将不胜感激!

标签: rmergedirectoryrename

解决方案


我认为这条线

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

应该:

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

因为通过使用basename,我们删除了所有文件夹,留下了文件名,并且使用gsub"DistList.txt"将文件名替换为空字符串。""

我们实际上可能希望在下面提取最后一个目录,在您的情况下应该给出如下内容c("C1.1", "C1.2", ...)

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

推荐阅读