按多个条件计算时间序列中的事件类型

时间:2017-12-12 16:51:37

标签: r dplyr time-series

我希望在一个时间序列中计算组内每个子组的计数/总和。

我的问题与这个问题非常相似 Rolling Count of Events Over Time Series

对于交叉发布道歉,我一直在寻找在一个时间范围内(当前日期和之前的N(比如4天))计算第1组中每个类别的事件的方法。我想对第2组中的每个子类型重复此过程,即第2组是一个较大的组,可能/可能不包含第1组中的所有类别。

例如,如果我们有一个类似于以下

的数据框
dates = as.Date(c("2011-10-09",
    "2011-10-15",
    "2011-10-16", 
    "2011-10-18", 
    "2011-10-21", 
    "2011-10-22", 
    "2011-10-24")) 
group1=c("A",
     "A",
     "A", 
     "A", 
     "L", 
     "L", 
     "A")
group2=c("I",
     "I",
     "I", 
     "I", 
     "I", 
     "I", 
     "II")

df1 <- data.frame(dates, group1, group2) 

我正在寻找与此相似的输出。 (已编辑)最后,我想传播我的数据集,以便我将第1组中的类别放在不同的列中,并根据日期和第2组排列行。如何确保第1组类别的计数结转到新行(并满足上述时间范围)?

            dates  group1 group2  count (A)   count (L)
     1 2011-10-09      A      I        1         0
     2 2011-10-15      A      I        1         0
     3 2011-10-16      A      I        2         0
     4 2011-10-18      A      I        3         0
     5 2011-10-21      L      I        0         1
     6 2011-10-22      L      I        0         2
     7 2011-10-24      A      II       1         0

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您尝试在事件发生前的4天内显示group1和group2中所有事件发生的次数,则可以group_by这两个事件组然后进行计数(使用{{1分别访问每个日期)。

sapply

返回:

df1 %>%
  group_by(group1, group2) %>%
  mutate(count = sapply(dates
                        , function(x){
                          sum(dates <= x & dates > (x-4))
                          }))