首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在rollapply中返回NA?

在rollapply中返回NA?
EN

Stack Overflow用户
提问于 2017-04-26 16:37:19
回答 2查看 316关注 0票数 1
代码语言:javascript
复制
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。有可能吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-26 16:52:34

您可以通过在function中更改rollapply参数来直接做到这一点。类似于:

代码语言:javascript
复制
#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
票数 2
EN

Stack Overflow用户

发布于 2017-04-26 16:45:52

也许再次使用rollapply找出有三个或三个以上NA的索引,并用NA替换这些索引的值。

代码语言:javascript
复制
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.0
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43639951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档