我有这个 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
。基本上是一个时间明确的 id 网络to
和from
.
我想知道哪些id 在特定时间范围内to
共享一个id,即. 在其他情况下,我想知道 ids 1 和 2 是否在两天内都去咖啡店。,即from
2
to
5
id1
和2
in to
shared id分别在5
9和 10 ,因此将 在时间窗口 2 内共享事件。如果他们还在时间点 13 共享 id,例如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
但是,有两个主要问题b
。
首先在每个时间点内,这对ids
在两个方向上出现两次,即
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>
其次,我需要在时间窗口内对结果进行分类,以便我的最终结果没有时间只是共享事件的数量,即
编辑
时间问题的问题比预期的要多。对于这个问题,第一个问题就足够了。