rollapply 意味着当不适合时填充更小 window
rollapply mean with fill as smaller window when doesn't fit
这是样本 df:
tt <- as.Date("2000-01-01") + c(1, 2, 5, 6, 7, 8, 10)
z <- zoo(seq_along(tt), tt)
## - fill it out to a daily series, zm, using NAs
## using a zero width zoo series g on a grid
g <- zoo(, seq(start(z), end(z), "day"))
zm <- merge(z, g)
现在如果你这样做:
rollapply(zm, 5, mean, na.rm = TRUE, fill = NA, align = 'right')
这在开始时给你 4 个 NA。我想做的是当 window 小于 5 时使用更小的 window。所以当数据是:
2000-01-02 2000-01-03 2000-01-04 2000-01-05 2000-01-06 2000-01-07 2000-01-08 2000-01-09 2000-01-10 2000-01-11
1 2 NA NA 3 4 5 6 NA 7
那么结果就是:
2000-01-02 2000-01-03 2000-01-04 2000-01-05 2000-01-06 2000-01-07 2000-01-08 2000-01-09 2000-01-10 2000-01-11
1 1.5 1.5 1.5 2 3 4 4.5 4.5 5.5
解决方案
rollapply(zm, 5, mean, na.rm = TRUE, fill = NA, align = 'right', partial = TRUE)
结果
> rollapply(zm, 5, mean, na.rm = TRUE, fill = NA, align = 'right', partial = TRUE)
2000-01-02 2000-01-03 2000-01-04 2000-01-05 2000-01-06 2000-01-07 2000-01-08 2000-01-09 2000-01-10 2000-01-11
1.0 1.5 1.5 1.5 2.0 3.0 4.0 4.5 4.5 5.5
说明
来自 help("rollapply")
,在 partial
参数的文档中:
partial
logical or numeric. If FALSE (default) then FUN is only applied when
all indexes of the rolling window are within the observed time range.
If TRUE, then the subset of indexes that are in range are passed to
FUN. A numeric argument to partial can be used to determin the minimal
window size for partial computations.
这是样本 df:
tt <- as.Date("2000-01-01") + c(1, 2, 5, 6, 7, 8, 10)
z <- zoo(seq_along(tt), tt)
## - fill it out to a daily series, zm, using NAs
## using a zero width zoo series g on a grid
g <- zoo(, seq(start(z), end(z), "day"))
zm <- merge(z, g)
现在如果你这样做:
rollapply(zm, 5, mean, na.rm = TRUE, fill = NA, align = 'right')
这在开始时给你 4 个 NA。我想做的是当 window 小于 5 时使用更小的 window。所以当数据是:
2000-01-02 2000-01-03 2000-01-04 2000-01-05 2000-01-06 2000-01-07 2000-01-08 2000-01-09 2000-01-10 2000-01-11
1 2 NA NA 3 4 5 6 NA 7
那么结果就是:
2000-01-02 2000-01-03 2000-01-04 2000-01-05 2000-01-06 2000-01-07 2000-01-08 2000-01-09 2000-01-10 2000-01-11
1 1.5 1.5 1.5 2 3 4 4.5 4.5 5.5
解决方案
rollapply(zm, 5, mean, na.rm = TRUE, fill = NA, align = 'right', partial = TRUE)
结果
> rollapply(zm, 5, mean, na.rm = TRUE, fill = NA, align = 'right', partial = TRUE)
2000-01-02 2000-01-03 2000-01-04 2000-01-05 2000-01-06 2000-01-07 2000-01-08 2000-01-09 2000-01-10 2000-01-11
1.0 1.5 1.5 1.5 2.0 3.0 4.0 4.5 4.5 5.5
说明
来自 help("rollapply")
,在 partial
参数的文档中:
partial
logical or numeric. If FALSE (default) then FUN is only applied when all indexes of the rolling window are within the observed time range. If TRUE, then the subset of indexes that are in range are passed to FUN. A numeric argument to partial can be used to determin the minimal window size for partial computations.