R语言 根据列值对多个tsv文件中的行进行子集化;将结果合并到一个df中;为源文件名添加一列

ql3eal8s  于 2023-01-03  发布在  其他
关注(0)|答案(1)|浏览(213)

我有超过300个具有相同维度的tsv文件。所有文件的列标题都相同。我希望过滤这些文件中的每一个,以便只包含满足特定于一列的条件的行。例如,我希望包括“列A”=“基因1”或“基因2”或“基因3”的任何行。我还想把所有文件中的子集化数据合并到1 df中,并添加一个额外的列,这样我就知道每行来自哪个文件。我对R相当陌生,所以我没有编写应用于多个文件的脚本的经验。
我以前用过filter函数,但如何将其应用于多个文件?我应该合并所有文件中的数据,然后进行过滤吗?如果是,那么我如何在合并所有文件之前为每个文件的文件名添加一个额外的列?我读过for循环,但当我尝试使用它时,我得到了一个错误消息:Error in file(file, "rt") : invalid 'description' argument.任何帮助都将不胜感激!

for(i in M_Data){
    dat <- read_tsv (paste("/Users/EM/Desktop/Files",i,sep="\t"))
    dat$Source <- i
    M_Data_Merge <- rbind(M_Data_Merge,dat)
  }
pgvzfuti

pgvzfuti1#

data.table是您完成此任务的朋友:

library(data.table)

 fileNames = dir("path/to/files", pattern = "*.tsv", full.names = TRUE)
 listOfTables = lapply(fileNames, fread)

 # convert all tables to a big df
 df = rbindlist(listOfTables)

 # filter only the rows you want:
 newDf = df[ColumnA %chin% c("gene1", "gene2", "gene3"), ]

相关问题