我正在尝试计算数据框中一列的累积平均值,但我只希望根据条件来完成。
data <- data.frame(col1 = c("A","A","B","B","A"),
col2 = c(1,0,1,0,1))
让我们说我想将col3
计算为cummean
的{{1}},但前提是col2
预期输出应为
col1 = "A"
理想情况下,如果NA值默认为默认值cummean的A 1 1.00
A 1 0.50
B 1 NA
B 0 NA
A 1 0.67
值,那就很好了。
lag
我正在尝试A 1 1.00
A 1 0.50
B 1 0.50
B 0 0.50
A 1 0.67
,但不能完全正确地使用语法。答案可能应该是mutate_if
内包含常规cummean
的{{1}}。不确定什么是最好的方法。任何帮助深表感谢。谢谢!
答案 0 :(得分:1)
有条件地计算col2
的累积总和,然后除以col1
中 A 的累积计数:
data %>%
mutate(cummean = {
isA <- col1 == 'A'
cumsum(isA * col2) / cumsum(isA)
})
# col1 col2 cummean
#1 A 1 1.0000000
#2 A 0 0.5000000
#3 B 1 0.5000000
#4 B 0 0.5000000
#5 A 1 0.6666667
答案 1 :(得分:0)
FWIW,我自己找到了解决方法
data %>%
mutate(col3 = ifelse(col1 == A, cummean(col2), NA)) %>%
tidyr::fill(col3, .direction = "up") ## for filling up the NA values with previous values
有没有更清洁/更好的方法?