rollapply na.rm=TRUE,给出0个值,而不是na';s

rollapply na.rm=TRUE,给出0个值,而不是na';s,r,na,rollapply,na.rm,R,Na,Rollapply,Na.rm,我有一个简单的问题,我在google、stackoverflow或stackexchange上似乎找不到答案。我目前正在使用rollapply的示例来查找包含NA的一些值的总和。例如: z <- zoo(c(NA, NA, NA, NA,2, 3, 4, 5, NA)) rollapply(z, 3, sum, na.rm = TRUE, align = "right") 这看起来不错,但是,有两次连续出现3个NA。求和功能将NA交换为0。不幸的是,由于0是一个有意义的值,所以这对我

我有一个简单的问题,我在google、stackoverflow或stackexchange上似乎找不到答案。我目前正在使用
rollapply
的示例来查找包含NA的一些值的总和。例如:

 z <- zoo(c(NA, NA, NA, NA,2, 3, 4, 5, NA))
 rollapply(z, 3, sum, na.rm = TRUE, align = "right")
这看起来不错,但是,有两次连续出现3个NA。求和功能将NA交换为0。不幸的是,由于0是一个有意义的值,所以这对我将要处理的数据不起作用。有没有办法再次将0替换为NA

我正在寻找如下输出:

  3   4   5  6  7  8  9 
  NA  NA  2  5  9 12  9 
提前谢谢你

您可以执行以下操作(尽管不是很好)


以下是两种方法:

1)请注意,
rollappy
不是给出0,而是
sum(x,na.rm=TRUE)
给出0。函数
sum(x,na.rm=TRUE)
不是这里真正需要的

相反,请提供一个以所需方式工作的
sum
,即当输入完全为
NA
值时返回
NA
,否则返回
sum(x,NA.rm=TRUE)

sum_na <- function(x) if (all(is.na(x))) NA else sum(x, na.rm = TRUE)
rollapplyr(z, 3, sum_na)
给予:

> zz
 3  4  5  6  7  8  9 
NA NA  2  5  9 12  9 

roll\u sumr
仍然会给出与
roll应用
相同的结果。我将您的代码修改为
roll\u sumr(z,3,na.rm=TRUE)
,但仍然给出了与以前类似的结果。我正在寻找的输出在主要问题中陈述,“不是很好”,但是它完成了工作。谢谢
> tmp
 3  4  5  6  7  8  9 
NA NA  2  5  9 12  9 
sum_na <- function(x) if (all(is.na(x))) NA else sum(x, na.rm = TRUE)
rollapplyr(z, 3, sum_na)
zz <- rollapplyr(z, 3, sum, na.rm = TRUE)
zz[rollapply(is.na(z), 3, all)] <- NA
> zz
 3  4  5  6  7  8  9 
NA NA  2  5  9 12  9