0

cbindファイルのリストで使用したいと思います。ただし、各ファイルは特定の染色体 (chr)(k in 1:29)と特定のサンプルに分割されています(i in 1:777)。ファイルは次のようなものです:

sample1chr1.txt、sample1chr2.txt ... sample1chr29.txt、sample2chr1.txt ... sample777chr29.txt

すべてのファイルの行名はまったく同じです (最初の 3 列は行名を表します)。すべてのサンプル ファイルにマージする各 chr の最終ファイルを取得したいと思います。最終ファイルで行名を繰り返しません (最初の 3 列は行名を表します)。

私はこれを試しました:

#Creating file with row names (3 first columns) to each Chr 
{
{for(k in 1:29){
  infile <- paste0("sample1chr",k,".txt")
  outfile <- paste0("LRRrawallchr",k,".txt")
  rows <- read.table(infile, header=TRUE, sep="\t")
  rows <- rows[, -grep("Log.R.Ratio", colnames(rows))]
  write.table(rows, outfile, sep=";")}}

#Cbind in one file per Chr
{  for(i in 1:777)
  for(k in 1:29){
    base <- paste0("LRRrawallchr",k,".txt")
    chr <- read.table(base, header=TRUE, sep=";")
    infile <- paste0("sample",i,"chr",k,".txt")
    chr2 <- read.table(infile, header=TRUE, sep="\t")
    outfile <- paste0("LRRrawallchr",k,".txt")
    chr2 <- chr2[, -grep("Name", colnames(chr2))]
    chr2 <- chr2[, -grep("Chr", colnames(chr2))]
    chr2 <- chr2[, -grep("Position", colnames(chr2))]
    chr <- cbind(chr, chr2)
    write.table(chr, outfile, sep=";", row.names=FALSE, col.names=FALSE)}
}

入力例 (sample1chr1.txt):

 Name      Chr  Position    sample1value
BAC-11034   1   128            0.302
BAC-11044   1   129            -0.56
BAC-11057   1   134            0.0840

入力例 (sample2chr1.txt):

Name       Chr  Position      sample2value
BAC-11034   1   128            0.25
BAC-11044   1   129            0.41
BAC-11057   1   134           -0.14

期待される出力 (LRRrawallchr1):

Name       Chr  Position    sample1value   sample2value
BAC-11034   1   128         0.302          0.25
BAC-11044   1   129         -0.56          0.41
BAC-11057   1   134         0.0840         -0.14

22553 個の異なる .txt ファイルがあります (777 個のサンプルごとに 29 個のファイル (chr ごとに 1 個))。22553 個のファイル (sample1chr1.txt、sample1chr2.txt ... sample1chr29.txt、sample2chr1.txt ... sample777chr29.txt) はすべて上記の例のようになります。

(LRRrawallchr1) のような 29 個のファイルが必要で、Chr ごとに 1 つです。「LRRrawallchr,k」ファイルは 777+3 (800 列) である必要があります。サンプルごとに 3 つの行名と 1 つの列。

乾杯!

4

3 に答える 3

0

mergeセットではなく、セットが必要cbindです。 merge共通または指定された列名に基づいて行を結合します。最初の 2 つをデータ フレームに読み取った後、このコマンドはマージを生成します。byコードでこれらの名前でフィルタリングしているため、(と)マージする一般的な列名を指定しています。

> merge(sample1chr1, sample1chr2, by=c('Name', 'Chr', 'Position'))
       Name Chr Position sample1value sample2value
1 BAC-11034   1      128        0.302         0.25
2 BAC-11044   1      129       -0.560         0.41
3 BAC-11057   1      134        0.084        -0.14

次に、次のセットでマージを続けます。

于 2014-04-19T14:51:11.737 に答える