【发布时间】:2019-03-31 12:25:50
【问题描述】:
这是我的玩具数据,我要计算 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 - previous(var4) 表示 var2 保持不变的观察次数。
条件 2:对于每个 var1,如果 var3 发生变化,则 diff_var4 为 var4 - previous(var4),表示 var2 保持不变的观察次数。
我开始了
df %>% group_by(var1) %>%
mutate(diff_var4 = var4-lag(var4))
但无法获得所需的 diff_var4,第 2 行为 NA,第 8 行为 6,最后一行为 3!
如何计算 diff_var4,最好使用 tidyverse 解决方案?
【问题讨论】: