r-不平衡时间序列上的滚动和



我有一系列每个类别的年度事件计数,没有该类别未发现事件的年份的行。我想增加一个专栏,显示过去三年中每年发生的事件数量。

处理这一问题的一种方法是为零事故的所有年份添加空行,然后使用带有左对齐四年窗口的rollapply(),但这会扩展我的数据集,超出我的意愿。当然有办法使用ddply()transform吗?

以下两行代码构建一个伪数据集,然后按类别执行一个简单的plyr求和:

dat <- data.frame(
   category=c(rep('A',6), rep('B',6), rep('C',6)), 
   year=rep(c(2000,2001,2004,2005,2009, 2010),3), 
   incidents=rpois(18, 3)
   )
ddply(dat, .(category) , transform, i_per_c=sum(incidents) )

这是有效的,但它只显示每个类别的总数。

我想要一个取决于年份的总数。

因此,我尝试使用function()语法扩展ddply()调用,如下所示:

ddply(dat, .(category) , transform, 
      function(x) i_per_c=sum(ifelse(x$year >= year - 4 & x$year < year,  x$incidents, 0) )
      )

这只是返回未修改的原始数据帧。

我一定在plyr语法中遗漏了一些内容,但我不知道它是什么

谢谢,Matt

这有点难看,但它确实有效。嵌套层调用:

ddply(dat, .(category), 
    function(datc) adply(datc, 1, 
         function(x) data.frame(run_incidents =
                                sum(subset(datc, year>(x$year-2) & year<=x$year)$incidents))))

可能有一种稍微干净一点的方法,而且肯定有一些方法执行得更快。

最新更新