私はこれを持っています data.frame
:
df <- read.table(text= " section to from time
a 1 5 9
a 2 5 9
a 1 5 10
a 2 6 10
a 2 7 11
a 2 7 12
a 3 7 12
a 4 7 12
a 4 6 13 ", header = TRUE)
各行は、ある時点でのIDの同時発生を識別to
しfrom
ますtime
。基本的に、to
とのIDの時間明示ネットワークfrom
。
である特定の時間範囲内でどのIDがto
IDを共有したか知りたいです。それ以外の場合は、両方のID1と2が互いに2日以内にコーヒーショップに行ったかどうかを知りたいです。from
2
to
5
id1
とinsharedidは2
、それぞれ9と10にあるため、タイムウィンドウ2内でイベントを 共有します。to
5
from
time
1
from
a 1 5 9
a 2 5 9
a 1 7 13
a 2 7 13
その後1
、2
_2
したがって、私が望む最終的な出力は次のようにdf
なります。
section to.a to.b noShared
a 1 2 1
a 2 3 1
a 2 4 1
a 3 4 1
私はそこにいくつかの方法を得ることができます:
library(plyr)
library(tnet)
a <- ddply(df, .(section,to,time), function(x)
data.frame(from = unique(x$from)) )
b <- ddply(a, .(section,time), function(x) {
b <- as.tnet(x[, c("to","from")], type="binary two-mode tnet")
b <- projecting_tm(b, method="sum")
return(b)
})
これにより、各ポイント内のto
共有IDのどのIDが取得されます。from
time
ただし、には2つの主な問題がありb
ます。
まず、各時点で、ペアがids
両方向に2回出現します。
1 2 5 9 # id 1 and 2 went to coffee shop 5 at time 9
2 1 5 9 # id 2 and 1 went to coffee shop 5 at time 9
I only want each sombination to appear once:
1 2 5 # id 1 and 2 went to coffee shop 5 at time 9</strike>
次に、時間枠内で結果をビニングして、最終結果に共有イベントの数だけの時間が含まれないようにする必要があります。
編集
時間の問題には、予想よりも多くの問題があります。この質問には最初の問題で十分です。