我想对 14 个不同用户的时差差异汇总一列,当这些时差发生在一些固定时间事件中(事件数=108)。
这里的第一个数据帧的头部具有时差"diff",此数据帧包含152171行:
head(hope)
times users signal mode diff
1 2014-01-13 00:00:16 00250902DC7D true ON 31
2 2014-01-13 00:00:47 00250902DC7D true ON 31
3 2014-01-13 00:01:18 00250902DC7D true ON 30
4 2014-01-13 00:01:48 00250902DC7D true ON 31
5 2014-01-13 00:02:19 00250902DC7D true ON 31
6 2014-01-13 00:02:50 00250902DC7D true ON 31
具有 108 个不同时间范围 (nrow=108) 的第二个数据帧为:
head(events)
start end
1 2014-01-14 06:30:00 2014-01-14 07:00:00
2 2014-01-14 10:30:00 2014-01-14 11:00:00
3 2014-01-14 18:00:00 2014-01-14 18:30:00
4 2014-01-14 22:30:00 2014-01-14 22:59:00
5 2014-01-15 02:30:00 2014-01-15 02:59:00
6 2014-01-15 09:00:00 2014-01-15 09:30:00
如果我手动选择一个事件(我偶然选择了第 12 个事件..),我能够计算第 12 个事件内的时差 ( diff
),它可以工作......但我有 108 种不同的 evevnt...
hope1 <- hope[hope$mode=="ON" & hope$times>events[12,1] & hope$times<events[12,2],]
ddply(hope1,.(users),summarize,sum=sum(diff))
users sum
1 00250902DC7D 1857
2 00250902FA92 1857
3 00250902FB05 1857
4 002509030C41 1857
5 002509030E53 1857
*好吧,完美,但仅适用于一个事件*
如果我想为 108 个不同的事件执行此操作,我应该使用循环吗?
我尝试了类似于以下代码的东西,但我/它失败了...:
> for (i in 1:108)
+ hope5 <- data.frame(hope[hope$mode=="ON" & hope$times>events[i,1] & hope$times<events[i,2],])
ddply(hope5,.(users),summarize,sum=sum(diff))
你能帮我吗?
我想得到这样的输出:
> pippo
00250902DC7D 00250902FA92 00250902FB05
2014-01-14 06:30:00 35 32 335
2014-01-14 10:30:00 38 31 338
2014-01-14 18:00:00 49 29 429
2014-01-14 22:30:00 48 438 48
2014-01-15 02:30:00 29 29 289
您可以使用list
和lapply
:
hopeN <- lapply(1:nrow(events), function(i) hope[hope$mode=="ON" & hope$times>events[i,1] & hope$times<events[i,2],])
result <- lapply(1:length(hopeN), function(i) ddply(hopeN[[i]],.(users),summarize,sum=sum(diff)))
结果是data.frames
的列表。