这是一个简单的问题。我在不同的目录中有许多输出,我想将它们全部合并。但是,我有两个担忧,这让我有点困惑:
1)我想建立一个循环。从我的问题来看:(如何遍历不同目录中的文件 [R])我有很多不同家庭 ID 下的文件。现在我有了这些不同 ID 的输出文件,我想将具有相同系列编号的文件合并在一起 - 例如将所有系列 1 文件(1a、1b、1c)合并在一起,将系列 3 文件合并在一起等。
所以我的文件是这样设置的:
/home/smith/Family1a/Family1a.txt
/home/smith/Family1a/Family1b.txt
/home/smith/Family1a/Family1c.txt
/home/smith/Family1a/Family2.txt
/home/smith/Family1a/Family3a.txt
/home/smith/Family1a/Family3b.txt etc
我想将所有家庭 1 文件合并在一起,家庭 3 一起等等。
2) 每个文件中都有一些重复的列名。所有文件都有相同的标题(大多数都有),所以我想保留前 5 列(而不是继续合并这些)并合并每个文件不同的最后三个。但是,对于这三列,因为它们都标记相同,我想知道是否可以以某种方式标记它们以指示其来自哪个系列文件 - 也就是说,在合并之前在这三个列标题之后添加前缀系列字母。
所以我的文件有以下标题:
rs MID DID PID mom dad rec dom
列“rs”直到“DID”在每个家庭编号中都是相同的(在所有家庭 1 文件中相同,在所有家庭 3 文件中相同等),但它的“PID”、“妈妈”、“爸爸”、 “rec”和“dom”列在上面列出的所有文件之间有所不同)
我什至没有试图弄清楚这一点。我查看了 list.files 和 lapply 并扫描,但每次我这样做时都会变得更加困惑。
我不擅长 R(这从我以前的帖子中很清楚)所以任何帮助将不胜感激。
谢谢
编辑:
感谢 Codoremifa - 我有以下代码。没有错误,但没有数据正在生成文件......我相信这是一件容易的事情:
library(data.table)
patternstomatch <- paste("Family",1:11,sep = "")
for (i in patternstomatch)
{
filestorbind <-list.files(paste("/home/smith/",patternstomatch))
if(length(filestorbind) > 1)
{
for (j in filestorbind)
{
tempfile <- read.table(j)
if (exists(paste("/home/smith/",patternstomatch,"a/",patternstomatch,"a.txt")))
{
masterfile <- merge(masterfile, tempfile, by = c(1:9))
} else {
masterfile <- tempfile
}
}
write.table(masterfile,paste("/home/smith/",patternstomatch,".txt"),sep="\t",row.names=F,col.names=F,quote=F)
}
}
我觉得这可能与这部分有关:
filestorbind <-list.files(paste("/home/smith/",patternstomatch))
但不确定。
编辑2:
这是我的完整目录路径,包括我要合并的特定文件的名称:
/home/smith/Project001/Family1a/Project001_Family1a_vcf_denovo_rec.txt
/home/smith/Project001/Family1b/Project001_Family1b_vcf_denovo_rec.txt
/home/smith/Project001/Family1c/Project001_Family1c_vcf_denovo_rec.txt
/home/smith/Project001/Family2/Project001_Family2_vcf_denovo_rec.txt
/home/smith/Project001/Family3a/Project001_Family3a_vcf_denovo_rec.txt
/home/smith/Project001/Family3b/Project001_Family3b_vcf_denovo_rec.txt
如上所述 - 我想合并所有具有相同系列编号的文件 - 例如将所有系列 1 文件(1a、1b、1c)合并在一起,将系列 3 文件合并在一起等。
此外,每个系列的每个文件中的前 9 列都是相同的 - 但最后 4 列不同。鉴于此 - 我不想继续合并这 9 列,而是将它们保留在一个列中并合并每个文件不同的列。