这是我的玩具数据,想要计算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解决方案。
答案 0 :(得分:0)
以下解决了问题:
df %>% group_by(var1) %>%
mutate(diff_var4 = var4-lag(var4)) %>%
group_by(var1, var2) %>%
mutate(diff_var4 = max(diff_var4))
如果有的话,仍然欢迎其他解决方案。