r - 累积平均值不包括当前观察值 - 使用 cummean 和 group_by 同时忽略 NA

标签 r dplyr

df <- data.frame(category=c("cat1","cat1","cat2","cat1","cat2","cat2","cat1","cat2"),
                 value=c(NA,2,3,4,5,NA,7,8))

我想在上面的数据框中添加一个新列,它采用 value 列到先前观察值(即不包括当前观察值)的累积平均值,并且不考虑不适用。我试过了

df %>%
  group_by(category, isna = is.na(value)) %>%
  mutate(new_col = ifelse(isna, NA, cummean(lag(value))))

但是 cummean 只是不知道如何处理 NA,不幸的是 lag 生成了它们。

我不想将 NA 计为 0。

最佳答案

可以先锻炼cummean,然后再锻炼lag

library(dplyr)
df %>%
  group_by(category, isna = is.na(value)) %>%
  mutate(new_col = lag(cummean(value))) %>%
  ungroup() %>%
  select(-isna)


# # A tibble: 8 x 3
# category value new_col
# <fctr>   <dbl>   <dbl>
# 1 cat1     NA      NA   
# 2 cat1      2.00   NA   
# 3 cat2      3.00   NA   
# 4 cat1      4.00    2.00
# 5 cat2      5.00    3.00
# 6 cat2     NA      NA   
# 7 cat1      7.00    3.00
# 8 cat2      8.00    4.00

关于r - 累积平均值不包括当前观察值 - 使用 cummean 和 group_by 同时忽略 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49909523/

相关文章:

r - dplyr 取消引用不适用于过滤功能

r - aov() 的残差是如何计算的?

r - 了解 R - is.na 和空白 ""单元格

r - 如何提取具有最小值或最大值的行?

r - Slice_min 和 Slice_max 关系说明

将 NA 替换为基于 R 数据帧中它们前面的数字的数字

r - ggplot : text printed by geom_text is not clear

r - 使用所有列 NA 过滤 data.frame,但在某些列 NA 时保留

r - 使用 pivot_wider 获取 true 或 false

r - 将参数传递给 dplyr 函数