これは簡単な質問です。さまざまなディレクトリに多数の出力があり、それらをすべてマージしたいと考えています。ただし、これを少し混乱させる2つの懸念があります。
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 列を 1 つから保持し (これらをマージし続けるのではなく)、ファイルごとに異なる最後の 3 列をマージします。ただし、これらの 3 つの列にはすべて同じラベルが付けられているため、どのファミリ ファイルから来たものかを示すために何らかのラベルを付けることができるかどうか疑問に思っていました。
したがって、私のファイルには次の見出しがあります。
rs MID DID PID mom dad rec dom
「rs」から「DID」までの列は、各ファミリー番号で同じです (すべてのファミリー 1 ファイルで同じ、すべてのファミリー 3 ファイルで同じなど) が、「PID」、「お母さん」、「お父さん」、上記のすべてのファイル間で異なる「rec」列と「dom」列)
私はこれを理解しようとさえしていません。list.files と lapply と scan を見てきましたが、これを行うたびに混乱しています。
私はRが苦手なので(以前の投稿から明らかです)、どんな助けでも大歓迎です。
ありがとう
編集:
コドレミファのおかげで、以下のコードができました。エラーはありませんが、ファイルが生成されているデータはありません...簡単なことだと確信しています:
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つの列をマージし続けたくはありませんが、これらを1つから保持し、ファイルごとに異なる列をマージします。