如何使用dplyr的lag函数生成多层嵌套分组下的滞后变量
正确实现方法
核心逻辑:你需要将*不随波次变化的分组维度(party、inc)*设置为分组变量,wave仅作为组内排序的依据,不要放入分组参数中。
dplyr 实现代码
library(dplyr) df %>% group_by(party, inc) %>% arrange(wave, .by_group = TRUE) %>% mutate(lag = lag(value, n = 1))
如果不需要显式修改原数据排序,也可以直接在lag函数中指定排序字段,写法更简洁:
df %>% group_by(party, inc) %>% mutate(lag = lag(value, order_by = wave))
运行上述代码得到的结果与你给出的预期输出完全一致。
错误原因说明
- 按wave分组:分组后每个组内均为同一波次的观测,无法提取上一波次的数值
- 按party+wave分组:分组后每个组内为同一党派同一波次的观测,同样无法跨波次取值
- 按party+wave+inc分组:每个分组仅含1条观测,计算滞后自然全部返回NA
内容的提问来源于stack exchange,提问作者Joost Maxen
相关产品推荐
相关产品推荐

