用“+”减少 purrr 中的值,但忽略 R 中缺失的值

问题描述 投票:0回答:1

如何将

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)))
r purrr
1个回答
0
投票

我不确定

reduce
是否是进行此类计算的正确函数。这里有几个选项可以达到相同的结果。

  1. NA
    值替换为 0 并使用
    +
  2. 添加
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
  1. 使用
    map2
    sum
    这两个值忽略
    NA
    值。
a %>% mutate(addition = map2(b, lag(b), ~sum(.x, .y, na.rm = TRUE)))
© www.soinside.com 2019 - 2024. All rights reserved.