如何将
reduce
函数与 lag
一起使用来获得求和,同时忽略缺失值?
a <- data.frame( b = c(1, 2, NA, 3, 4, 5))
a %>% mutate(addition = reduce(map(0:1, ~lag(b, .x)) , `+`))
结果表
b | 补充 |
---|---|
1 | 不适用 |
2 | 3 |
不适用 | 不适用 |
3 | 不适用 |
4 | 7 |
5 | 9 |
我想要的结果是
b | 补充 |
---|---|
1 | 1 |
2 | 3 |
不适用 | 2 |
3 | 3 |
4 | 7 |
5 | 9 |
因此,期望的结果是忽略 NA 并对当前值及其滞后值进行加法。我简化了示例,但在实际情况中,我需要 12 的滚动总和。
我尝试了以下操作,对于列
addition
的结果是相同的,其中所有行都返回 25。为什么这不起作用?
a <- data.frame( b = c(1, 2, NA, 3, 4, 5))
a %>% mutate(addition = reduce(map(0:1, ~lag(b, .x)) , ~sum(.x, .y, na.rm = TRUE)))
我不确定
reduce
是否是进行此类计算的正确函数。这里有几个选项可以达到相同的结果。
NA
值替换为 0 并使用 +
library(purrr)
library(dplyr)
a %>% mutate(addition = replace(b, is.na(b),0) + replace(lag(b), is.na(lag(b)),0))
# b addition
#1 1 1
#2 2 3
#3 NA 2
#4 3 3
#5 4 7
#6 5 9
map2
和 sum
这两个值忽略 NA
值。a %>% mutate(addition = map2(b, lag(b), ~sum(.x, .y, na.rm = TRUE)))