【问题标题】:How can I use a loop in function within ddply如何在 ddply 中使用函数循环
【发布时间】:2014-02-26 16:09:59
【问题描述】:

当这些时间差异发生在某些固定时间事件(事件数=108)中时,我想为 14 个不同用户汇总一列时间差异差异。
这里是第一个具有时间差 '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 个不同的事件.. .

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

【问题讨论】:

    标签: r loops plyr


    【解决方案1】:

    您可以使用 listlapply

    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的列表。

    【讨论】:

    • @Vicorp 嗨,我想知道是否可以获得不同的数据输出?我的意思是这样的:`> 结果' 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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2019-12-07
    • 2020-10-11
    • 1970-01-01
    相关资源
    最近更新 更多