df <- data.frame(category=c("cat1","cat1","cat2","cat1","cat2","cat2","cat1","cat2"),
value=c(NA,2,3,4,5,NA,7,8))
我想在上面的数据框中添加一个新列,它将value
列的累积平均值计算到先前的观察值(即不包括当前观察值),而不考虑NA。我试过了
df %>%
group_by(category, isna = is.na(value)) %>%
mutate(new_col = ifelse(isna, NA, cummean(lag(value))))
但cummean
只是不知道如何处理NAs,不幸的是lag
会生成它们。
我不想将NAs算为0。
答案 0 :(得分:1)
可以先锻炼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