在数据表中滚动应用以计算总和 returns NAs

rollapply in datatable to calculate sums returns NAs

我想在 R 中计算滚动总和。我正在使用此代码创建数据 table TT:

TT <- data.table(ID=c(rep(100,9),rep(200,6)),date=seq(as.Date("1958-04-25"),as.Date("1958-05-9"),by="days"),
             output=c(5,8,NA,6,7,8,NA,12,13,2,14,12,14,14,NA))

这里我尝试计算滚动总和,但结果只有 NA,即使在第一种情况(ID)中,长度应该 > 7。

TT[,XX :=
 ifelse(length(output) >= 7,
        rollapply(output, 7, sum, na.rm = TRUE,align = "right",fill = NA_real_),
        rep(NA_real_,length(output))),by=ID]

TT[,length(output),by=ID]

我想做的是计算每个 ID 的 window 为 7 的滚动总和。如果每个 ID 不可能(即没有足够的行),我只想拥有 NA。我也对其他解决方案持开放态度。

您可以使用 ifelse 而不是 ifelseifelse(test, yes, no) returns 与 test 形状相同的值,结果的模式可能取决于 test 的值。

TT[, XX := if(length(output) >= 7) rollapply(output, 7, sum, na.rm = TRUE, align = "right", fill = NA_real_) else rep(NA_real_, length(output)), by = ID]

     ID       date output XX
 1: 100 1958-04-25      5 NA
 2: 100 1958-04-26      8 NA
 3: 100 1958-04-27     NA NA
 4: 100 1958-04-28      6 NA
 5: 100 1958-04-29      7 NA
 6: 100 1958-04-30      8 NA
 7: 100 1958-05-01     NA 34
 8: 100 1958-05-02     12 41
 9: 100 1958-05-03     13 46
10: 200 1958-05-04      2 NA
11: 200 1958-05-05     14 NA
12: 200 1958-05-06     12 NA
13: 200 1958-05-07     14 NA
14: 200 1958-05-08     14 NA
15: 200 1958-05-09     NA NA