2012-02-06 9 views
1

を更新することにより、2つの長さの異なるデータ・フレームをマージ:は、次のデータフレームを考慮した情報

> tail(tot.final) 
    names.id     sequence names.reads width.reads names.counts st end flag 
819 125546 TAGCTTATATGACTGATGTTGACA 125546-4   24   4 8 31 TRUE 
820 218783 TCGCTTATCAGACTGATGTTGAAA 218783-2   24   2 8 31 TRUE 
821 272992 CAGCTTATCAGACTGATGTTGAAA 272992-2   24   2 8 31 TRUE 
822 135191 TAGCTTATCAGACTGATGTTGAACA 135191-4   25   4 8 32 TRUE 
823 278047 TAGCTTATCAGACTGATGTTGAAGA 278047-2   25   2 8 32 TRUE 
824 317980 TAGCTTATCAGACTGATGTTGCCCT 317980-2   25   2 8 32 TRUE 

head(plusa) 
    names.id   sequence names.reads width.reads names.counts st end flag 
2  28092 ATCAGACTGATGTTGAC 28092-29   17   29 14 30 TRUE 
4  65308 TTATCAGACTGATGTTGA 65308-10   18   10 12 29 TRUE 
6  71226 TATCAGACTGATGTTGAC  71226-9   18   9 13 30 TRUE 

> nrow(tot.final) 
[1] 824 
> nrow(plusa) 
[1] 421 

plusa contains 451 rows with a common plusa$sequence column. (not sorted) 

Iは、対応のplusaする$ names.counts値を加算することによりtot.final $ names.counts要素を更新したいですプラス$配列。

"sequence"フィールドをidと見なしてこのようにマージする可能性はありますか?

+0

質問 - 'names.id = 4'と'シーケンス= 'TTATCAGACTGATGTTGA''のためにあなたの 'plusa'、どの行でtot.final''であなたべきそれらはすべて同じシーケンスを持つように見えるので、それを追加しますか?そして、新しい 'names.id'、' st'、 'end'、' width.reads'などの値を 'plusa'から、あるいは' names.counts'だけを更新したいのですか? –

+0

names.idはカウントされませんが、それはplusaのシーケンスIDと一致しないシーケンスIDです。 ;私は新しい名前を格納したいだけです。数量 – agatha

+0

ごめんなさい、私はシーケンスを誤読しました。だから 'TAGCTTATCAGACTGATGT 'という配列を持つ' plusa'の行を 'tot.final'の行に入れたいのであれば(最初の4つはすべて同じシーケンスを持つので)、それを追加しますか?または、 'sequence'と 'counts'を持つ新しいデータフレームを必要としますか? 'TTATCAGACTGATGTTGA'の 'counts'は1505 + 46 + 26 + 23 + 'plusa'にマッチします。 –

答えて

0

は、私の知る限り理解できるように、私は、これはあなたが何をしたいかだと思う:アップ 合計:

  1. は(たとえばrbind)plusaこのデータフレーム内の各ユニークなシーケンスのtot.final
  2. に参加カウントの列。

この場合、plyrライブラリを使用できます。 ddply(dataframe,.(sequence),FUNCTION)手段が

library(plyr) 
df.final <- data.frame(sequence=c('A','B','C','D'), 
         counts=c(100,123,234,200), 
         stringsAsFactors=F) 
# sequence counts 
# 1  A 100 
# 2  B 123 
# 3  C 234 
# 4  D 200 

df.plusa <- data.frame(sequence=c('A','E','C','F'), 
         counts=c(10,20,30,40), 
         stringsAsFactors=F) 
# sequence counts 
# 1  A  10 
# 2  E  20 
# 3  C  30 
# 4  F  40 

# rbind together and do the counts: 
df.final.aggregated <- ddply(rbind(df.final,df.plusa), 
          .(sequence), 
          summarise, 
          counts=sum(counts)) 
# sequence counts 
# 1  A 110 
# 2  B 123 
# 3  C 264 
# 4  D 200 
# 5  E  20 
# 6  F  40 

注:私はあなたがあなたにそれを適応することができる電子なければならない、説明するために例を作った、これは仕事ができるあなたの特定のデータについては

for each unique seq in dataframe$sequence: 
    do FUNCTION(dataframe[ dataframe$sequence==seq, ]) 
    merge them all back into one big dataframe. 

を(としてテストしていません私は)あなたのデータを持っていない:

ddply(rbind(tot.final,plusa), .(sequence), summarise, 
     names.counts = sum(names.counts)) 
+0

と魔法が起こった...それは完璧に動作します。どうやら、私の場合、複数のサブセッティングではできないことをddplyします。 – agatha

関連する問題