【发布时间】:2012-01-20 21:16:06
【问题描述】:
我有每个类别的一系列年度事件计数,没有针对该类别未发现事件的年份的行。我想添加一列,显示过去三年中每年发生的事件数量。
解决此问题的一种方法是为所有年份添加零事件的空行,然后将rollapply() 与左对齐的四年窗口一起使用,但这会使我的数据集扩展得超出我的预期。肯定有办法为此使用ddply() 和transform?
以下两行代码构建一个虚拟数据集,然后按类别执行一个简单的plyr sum:
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 语法中遗漏了一些东西,但我不知道它是什么。
谢谢, 马特
【问题讨论】:
标签: r time-series plyr