rollapply na.rm=TRUE,给出0个值,而不是na';s
我有一个简单的问题,我在google、stackoverflow或stackexchange上似乎找不到答案。我目前正在使用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是一个有意义的值,所以这对我
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