私の最初の投稿で、私は R に非常に慣れていないので、これはロブかもしれません。私は解決策を探していたので、ついに助けを求めて投稿しました。明確にする必要があるか、詳細情報を提供する必要がある場合はお知らせください。
次のような大きなデータフレームがあります。
numReads length name2
0 7384 Ssxb2
7904 93237 St5
3438 12969 Taf9b
0 996 Tas2r138
0 882 Tas2r143
0 960 Tas2r144
0 6761 Tbx10
8125 43804 Tdrd1
8124 43738 Tdrd1
8102 39301 Tdrd1
1227 9286 Thnsl1
3 番目の列 (name2) でデータをグループ化し、max()
numReads の値を見つけ、関連する長さの値を維持するにはどうすればよいですか?
私の理想的な出力は、その因子レベルの最大値を含まない「Tdrd1」に関連付けられた2行(8124および8102値の行)を持つ上記のデータです。
tapply()
、、、by()
およびを試しaggregate()
ました。それらのどれも私に適切な出力を提供できません。
前もって感謝します。
予想よりもはるかに早く来たコメントの後に編集します。ありがとうございました!
理想的な結果の例は次のようになります
numReads length name2
0 7384 Ssxb2
7904 93237 St5
3438 12969 Taf9b
0 996 Tas2r138
0 882 Tas2r143
0 960 Tas2r144
0 6761 Tbx10
8125 43804 Tdrd1
1227 9286 Thnsl1
ここで2つの質問があるようです。1 つ目は、要因に基づいてデータをグループ化することです。2 つ目は、グループの関数を計算する方法ですが、選択した関数を計算した後に行全体を出力する方法です。
私は、aggregate() の後に merge() というアイデアが好きです。しかし、merge() 関数は、元の行のどの行から、共通因子レベルに基づいて「長さ」の値を取得するかをどのように知るのでしょうか?
データは、トランスクリプトの注釈に基づく遺伝子発現データのスナップショットです。関連する 'name2' について、最高の表現 (numReads に関して) のトランスクリプトを選択しようとしています。ダウンストリームの正規化のために長さのデータが必要です。
ROLOによる非常に役立つ提案を使用しようとした後、編集してください。再度、感謝します!
Chase と daroczig にも感謝します。
そのため、ddply() アプローチを使用してデータフレームを「name2」で分割し、読み取り数で降順で並べ替え、一番上の行を選択しようとしています。これにより、各グループの「name2」の最大値が効果的に得られ、すべての元の情報、特に長さが維持されます。
残念ながら、34,000 行を超えるデータフレームでこれを実行しようとしています。〜1000行、さらに〜5000行でも問題なく動作しますが、データセット全体を渡すとクラッシュします。
.parallel オプションを使用しようとしましたが、次のエラーで失敗します:
Loading required package: foreach
Error: foreach package required for parallel plyr operation
また、 .progressbar オプションを使用して操作を監視しようとしました。進行状況バーは 100% になりますが、操作は決して終了しません。
この操作を完全なデータセットに適用する方法についてのアイデアはありますか?