1

サンプルの異なるセットの遺伝子発現データを含む 5 つの data.frames があります。各 data.set の行数が異なるため、row.names (遺伝子) が部分的にしか重複していません。

ここで、a) 5 つの data.frames をフィルタリングして、すべての data.frames に存在する遺伝子のみを含め、b) それらの遺伝子の遺伝子発現データを 1 つの data.frame に結合します。

これまでに見つけたのはマージだけでしたが、2 つの data.frame しかマージできないため、複数回使用する必要がありました。もっと簡単な方法はありますか?

4

2 に答える 2

5

すべてのデータ フレームに存在しない行名を除外する場合、マージはあまり効率的ではありません。ここで別の提案です。

まず、3 つのデータ フレームの例:

df1 <- data.frame(a = 1:5, b = 1:5, 
                  row.names = letters[1:5]) # letters a to e
df2 <- data.frame(a = 1:5, b = 1:5, 
                  row.names = letters[3:7]) # letters c to g
df3 <- data.frame(a = 1:5, b = 1:5, 
                  row.names = letters[c(1,2,3,5,7)]) # letters a, b, c, e, and g
# row names being present in all data frames: c and e

データ フレームをリストに入れます。

dfList <- list(df1, df2, df3)

一般的な行名を検索します。

idx <- Reduce(intersect, lapply(dfList, rownames))

データの抽出:

df1[idx, ]

  a b
c 3 3
e 5 5

PSすべてのデータ フレームから対応する行を保持する場合は、最後のステップdf1[idx, ]を次のコマンドに置き換えることができます。

do.call(rbind, lapply(dfList, "[", idx, ))
于 2013-05-29T08:33:07.417 に答える