我正在尝试在一个看起来像这个可重现示例的 data.table 中测试各种条件
set.seed(17)
year <- 1980 + rnbinom(10000,3,0.35)
event <- rep(LETTERS, length.out=10000)
z <- as.integer(runif(10000,min = 0, max = 10))
dt <- data.table(event,year,z)
setkey(dt, event,year)
dt <- dt[,sum(z), by=c("event","year")]
V1
(从最后一个命令出现)表示事件发生的计数。
所以数据表是一个有序数组,我需要在它上面执行各种函数。这里有些例子:
如何计算每个事件在前 10 年发生的滚动总和(或滚动平均值)?因此,对于A 1990,所需的输出为 1,452(1980 年到 1989 年之间)。对于H 2012,输出为 11,因为在 2002 年和 2011 年之间只有 11 次出现(2002 年 3 次,2007 年 3 次,2010 年 5 次)。对于A 1983,输出为
NA
如何检查事件是否在前 15 年中至少有 12 年发生?因此,对于A 1997,我们可以看到该事件在前 15 年(1982 - 1996 年,除 1996 年之外的每一年都发生)中发生了超过 12 年,因此符合标准。然而,对于A 2001,我们看到该事件仅发生在前 15 年(1986 - 2000 年)中的 11 年,它没有发生在 1996、1998、1999 和 2000 年)不符合标准。此处所需的输出将是离散的 1(满足标准)或 0(未满足标准)
理想情况下,该代码不仅可以计算 1 和 2 years
,data.table
而且还可以计算 1980 年至 2013 年间缺失的那些。所以对于K 2005,我们可以将 Q1 的结果计算为 25 (13 + 5 + 3 + 3 + 2) (感谢@Arun 指出前一个错误)。对于第二季度,我们看到该事件在 1999、2000、2001、2003 和 2004 年没有发生,因此“15 年中至少有 12 年”的标准没有得到满足。此外,事件-年份组合可能存在于 data.table 中,但 V1 的值为 0(参见第 18 行,A 2001)。理想情况下,这种零出现将被视为不出现(例如,通过删除所有 V1 为零的行)。
我知道发布两个问题并不常见,但我觉得它们属于一起并且确实与类似的问题相关。希望有人可以提出一些建议。
非常感谢,
西蒙