如何根据dplyr中的条件使用cummean

时间:2018-10-31 13:47:16

标签: r dplyr

我正在尝试计算数据框中一列的累积平均值,但我只希望根据条件来完成。

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}}。不确定什么是最好的方法。任何帮助深表感谢。谢谢!

2 个答案:

答案 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 

有没有更清洁/更好的方法?