x <- 1:10
x[6] <- NA
x
#[1] 1 2 3 4 5 NA 7 8 9 10
rollapply(x, 3, mean)
#[1] 2 3 4 NA NA NA 8 9我希望rollapply返回NA,以防移动窗口中有超过3个NAs。有可能吗?
发布于 2017-04-26 16:52:34
您可以通过在function中更改rollapply参数来直接做到这一点。类似于:
#Same input as d.b
x = c(1L, 2L, 3L, 4L, NA, NA, NA, 8L, 9L, 10L)
rollapply(x, 3, function(x) ifelse(sum(is.na(x))>=3, NA, mean(x, na.rm=T)))
#[1] 2.0 3.0 3.5 4.0 NA 8.0 8.5 9.0发布于 2017-04-26 16:45:52
也许再次使用rollapply找出有三个或三个以上NA的索引,并用NA替换这些索引的值。
x = c(1L, 2L, 3L, 4L, NA, NA, NA, 8L, 9L, 10L)
library(zoo)
replace(x = rollapply(x, 3, mean, na.rm = TRUE),
list = which(rollapply(data = is.na(x), 3, sum) >= 3),
values = NA)
#[1] 2.0 3.0 3.5 4.0 NA 8.0 8.5 9.0https://stackoverflow.com/questions/43639951
复制相似问题