二項情報を探しているリレーショナルデータセットがあります。
私は4つの列を持っています。送信者、受信者、属性、エッジ
繰り返される送信者-受信者カウントを取得し、それらを追加のエッジとして変換しようとしています。
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
重複する送信者と受信者の関係が組み合わされ、重複の数がエッジの数に組み込まれている場合。
どんな入力でも本当にありがたいです。
ありがとう!
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
楽しみのために、他に2つのオプションがあります。1つ目は基本関数aggregate()
を使用し、2つ目は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
記録のために、この質問は何度も何度も尋ねられ、 私自身の答え を熟読すると、正しい道を示すいくつかの答えが得られます。