R:循环遍历目录中的所有文件,应用列替换命令

Posted

技术标签:

【中文标题】R:循环遍历目录中的所有文件,应用列替换命令【英文标题】:R: Looping through all files in the directory, applying the column replacement command 【发布时间】:2020-01-29 15:55:09 【问题描述】:

所以我有一个 .txt 文件的目录。每个都包含代表某些测量特征的列。对于同一目录中的文件,我想将名为treatmentsum 的一列的内容替换为3S_TNFaCHx_cluster1_333nM+0.1ug/ml_none。 (我将在不同文件夹中用不同名称替换同一列,是的,我知道这个名称非常烦人,相信我还有更糟糕的名称)

所以我想,替换数据框中的列很容易,我只需打开目录然后执行以下操作:

df <- read.table(x, header=TRUE)
df$treatmentsum <- c("3S_TNFaCHx_cluster1_333nM+0.1ug/ml_none")

接下来,我只需要将它设为一个函数并将lapply 用于目录中的所有文件,并确保将新文件存放在新文件夹中。

完整的代码不起作用:

#set up directories
directory <- "C:/Users/XXX"
outdirectory <- "C:/Users/XXX/replaced"

#find all .txt files in the directory
files <- list.files(path=directory, pattern="*.txt", full.names=TRUE, recursive=FALSE)

lapply(files, function(x) 
    df <- read.table(x, header=TRUE)
    df$treatmentsum <- c("the new stupid name thanks to pharma")
    out <- function(df)
    # write to file
    write.table(out, outdirectory, sep="\t", quote=FALSE, row.names=FALSE, col.names=TRUE)
)

我收到的警告信息:

扫描错误(文件 = 文件,什么 = 什么,sep = sep,quote = quote,dec = dec,: 第 1 行没有 744 个元素

【问题讨论】:

一个明显的问题是这个out &lt;- function(df) 什么都不返回。只需将df 传递给write.table 感谢 Parfait 的编辑。我删除了 你应该给输出路径一个物理文件而不是文件夹。 我不太明白,对不起这里的菜鸟。你的意思是 write.table(df, XXX, sep="\t", quote=FALSE, row.names=FALSE, col.names=TRUE)。 XXX 需要是一个文件吗?我应该放什么文件? 【参考方案1】:

我尝试创建文件夹结构并测试了以下代码。似乎有效。

source_folder <- "Folder1"
destination_folder <- "Folder2"

files <- list.files(path = source_folder, pattern = "*.txt", 
                    full.names = TRUE, recursive = FALSE)

lapply(files, function(x) 
  df <- read.table(x, header=TRUE)
  df$Col2 <- c("the new stupid name thanks to pharma")
  write.table(df, paste0(destination_folder,"/", basename(x)), sep="\t", 
              quote=FALSE, row.names=FALSE, col.names=TRUE)
)

【讨论】:

谢谢 Vishal,但我仍然在第 1 行收到相同的错误消息没有 744 个元素 嗨 Vishal,非常有趣的是,代码在添加 fill=T 时运行。但是,返回的表中充满了许多 NA 的 exta 列,并且一半的标题被弄乱了。我将 read.table 更改为 read.csv,它解决了这个问题。唯一的问题是在表的末尾,我现在有一个额外的 NA 列 @Parfait Hi Parfait,(天哪,你可以在这里使用@!)你指的是“搞砸的NAs”吗?使用 read.csv 时,其他人对数据末尾的额外 NA 列有类似的回应。我从实验室以前的人那里得到数据,通过用记事本读取 .txt 文件,分隔符似乎是制表符或空格。输出文件的仪器只提供.txt格式,希望有一天他们也能生成csv文件。 @Parfait。我尝试使用 read.delim(),输出文件仍然有额外的 NA 列 @Parfait 谢谢你的帮助。在 read.delim 中不允许 row,names = 1。

以上是关于R:循环遍历目录中的所有文件,应用列替换命令的主要内容,如果未能解决你的问题,请参考以下文章

循环遍历子目录批处理文件中的文件

C语言遍历目录中的文件

r 循环遍历R中的文件并应用函数

如何告诉ffmpeg按顺序遍历目录中的所有文件

循环遍历目录中的所有文件[重复]

循环遍历 R 中的列并提取字符