1

コードのある時点で、次のようなテーブルのリストが表示されます。

[[1]]
     cluster_size start end number       p_value
13             2    12  13    131 4.209645e-233
12             1    12  12    100 6.166824e-185
22            11    12  22    132 6.916323e-143
23            12    12  23    133 1.176194e-139
13             1    13  13     31  3.464284e-38
13            68    13 117     34  3.275941e-37
23            78    23 117      2  4.503111e-32

...。

[[2]]
      cluster_size start end number       p_value
13             2    12  13    131 4.209645e-233
12             1    12  12    100 6.166824e-185
22            11    12  22    132 6.916323e-143
23            12    12  23    133 1.176194e-139
13             1    13  13     31  3.464284e-38

...。

ここでは完全な表を示していませんが、すべて同じサイズであることがわかります。私がやりたいのは、p値を合計する1つのテーブルを作成することです。問題は、異なるリスト要素でテーブルを見ると、$ cluster_size、start、$ end、および$ number列が必ずしも同じ行に対応していないため、単純な合計を行うことができないことです。

これを行う強引な方法は、次のとおりです。1)空白のテーブルを作成する2)最初のテーブルから適切な$ cluster_size、$ start、$ end、$ number列にコピーし、which()を使用して正しいp値をプルするすべてのテーブルからのステートメント。これを行うためのより賢い方法はありますか?それともこれはほとんどそれですか?

編集:データのdputファイルを求められました。ここにあります:http: //alrig.com/code/

サンプルの場合、行の順序はたまたま一致しています。常にそうであるとは限りません。

4

1 に答える 1

3

これは2つのステップで実行できるようです

  1. リストをdata.frameに変換します
  2. 要約するには、split-apply-combineアプローチのいずれかを使用します。

データの名前がXであるとすると、次のことができます。

library(plyr)
#need to convert to data.frame since all of your list objects are of class matrix
XDF <- as.data.frame(do.call("rbind", X))
ddply(XDF, .(cluster_size, start, end, number), summarize, sump = sum(p_value))
#-----
   cluster_size start end number          sump
1             1    12  12    100 5.550142e-184
2             1    13  13     31  3.117856e-37
3             1    22  22      1  9.000000e+00
...
29          105    23 117      2  6.271469e-16
30          106    22 146     13  7.266746e-25
31          107    23 146     12  1.382328e-25

ここでは、他の多くの集計手法について説明しますdata.tableデータが大きい場合はパッケージを調べます。

于 2012-09-15T04:35:08.773 に答える