16

二項情報を探しているリレーショナルデータセットがあります。

私は4つの列を持っています。送信者、受信者、属性、エッジ

繰り返されるSender--Receiverカウントを取得し、それらを追加のエッジとして変換することを検討しています。

df <- data.frame(sender = c(1,1,1,1,3,5), receiver = c(1,2,2,2,4,5), 
                attribute = c(12,12,12,12,13,13), edge = c(0,1,1,1,1,0))

   sender receiver attribute edge
1       1        1        12    0
2       1        2        12    1
3       1        2        12    1
4       1        2        12    1
5       3        4        13    1

最終結果を次のようにしたいと思います。

  sender receiver attribute edge
1      1        1        12    0
2      1        2        12    3
3      3        4        13    1

重複する送信者と受信者の関係が組み合わされ、重複の数がエッジの数に組み込まれている場合。

どんな入力でも本当にありがたいです。

ありがとう!

4

2 に答える 2

20

楽しみのために、他の 2 つのオプションを示します。最初は base 関数を使用し、 2 つ目はパッケージaggregate()を使用します。data.table

> aggregate(edge ~ sender + receiver + attribute, FUN = "sum", data = df)
  sender receiver attribute edge
1      1        1        12    0
2      1        2        12    3
3      3        4        13    1
4      5        5        13    0
> require(data.table)
> dt <- data.table(df)
> dt[, list(sumedge = sum(edge)), by = "sender, receiver, attribute"]
     sender receiver attribute sumedge
[1,]      1        1        12       0
[2,]      1        2        12       3
[3,]      3        4        13       1
[4,]      5        5        13       0

記録のために、この質問は何度も何度も尋ねられました。私自身の回答を熟読すると、正しい道を示すいくつかの回答が得られます.

于 2012-05-24T03:14:35.137 に答える
7

plyrあなたの友達です-入力データを考えると、あなたの最終結果は完全には正しくないと思いますが。

library(plyr)

ddply(df, .(sender, receiver, attribute), summarize, edge = sum(edge))

戻り値

  sender receiver attribute edge
1      1        1        12    0
2      1        2        12    3
3      3        4        13    1
4      5        5        13    0
于 2012-05-24T02:35:10.707 に答える