使用R的条件滞后计算

时间:2018-10-26 17:45:11

标签: r tidyverse

这是我的玩具数据,想要计算diff_var4。

df <- tibble::tribble(
  ~var1, ~var2, ~var3, ~var4, ~diff_var4,
     1L,    1L,    1L,    2L,         NA,
     1L,    1L,    1L,    2L,         NA,
     1L,    2L,    1L,    2L,         0L,
     1L,    2L,    1L,    2L,         0L,
     1L,    4L,    1L,    2L,         0L,
     1L,    5L,    1L,    2L,         0L,
     1L,    6L,    2L,    8L,         6L,
     1L,    6L,    2L,    8L,         6L,
     2L,    4L,    1L,    5L,         NA,
     2L,    5L,    1L,    5L,         0L,
     2L,    5L,    1L,    5L,         0L,
     2L,    6L,    2L,    8L,         3L,
     2L,    6L,    2L,    8L,         3L)

输入var1到var4,我需要计算diff_var4以便

条件1 :对于每个var1,如果var3为1且var2为min var2,则diff_var4为var4-var2保持不变的观察数的previous(var4)。 / p>

条件2 :对于每个var1,如果var3发生变化,则diff_var4为var4-previous(var4)表示var2保持不变的观测数。

我从

开始
df %>% group_by(var1) %>% 
  mutate(diff_var4 = var4-lag(var4))

但是无法获得所需的diff_var4,其NA在第二行,第六行在第八行,最后一行在三行!

请帮助计算diff_var4,最好使用tidyverse解决方案。

1 个答案:

答案 0 :(得分:0)

以下解决了问题:

df %>% group_by(var1) %>% 
  mutate(diff_var4 = var4-lag(var4)) %>%
  group_by(var1, var2) %>% 
  mutate(diff_var4 = max(diff_var4))

如果有的话,仍然欢迎其他解决方案。