我有一系列每个类别的年度事件计数,没有该类别未发现事件的年份的行。我想增加一个专栏,显示过去三年中每年发生的事件数量。
处理这一问题的一种方法是为零事故的所有年份添加空行,然后使用带有左对齐四年窗口的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))))
可能有一种稍微干净一点的方法,而且肯定有一些方法执行得更快。