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/