如何正确计算数据集中个体x1变量的年度变化值?
问题描述
原始数据集如下:
| Individual | Year | x1 | x2 |
|---|---|---|---|
| 1 | 1 | 3 | 5 |
| 1 | 2 | 7 | 4 |
| 1 | 3 | 8 | 6 |
| 2 | 1 | 0 | 6 |
| 2 | 2 | 9 | 2 |
需要创建变量Change_x1,计算每个个体的x1相较于上一年的变化值,目标格式如下:
| Individual | Year | x1 | x2 | Change_x1 |
|---|---|---|---|---|
| 1 | 1 | 3 | 5 | NA |
| 1 | 2 | 7 | 4 | 4 |
| 1 | 3 | 8 | 6 | 1 |
| 2 | 1 | 0 | 6 | NA |
| 2 | 2 | 9 | 2 | 9 |
尝试了以下R代码,但运行后Change_x1列全部为NA:
data%>% group_by(Individual,Year)%>% mutate(Change_x1 = x1 - lag(x1))
错误原因
问题出在group_by(Individual, Year):每个分组同时绑定了个体和年份,导致每个分组内只有1行数据。lag(x1)需要引用同一分组内的前一行数据,单个观测的分组没有前一行可调用,所以结果全为NA。
解决方法
仅按Individual分组,同时确保每个个体的观测按年份排序(如果数据已按年份排列可省略arrange,但添加后更稳妥),再计算变化值:
library(dplyr) data %>% arrange(Individual, Year) %>% # 确保每个个体的年份按顺序排列 group_by(Individual) %>% # 仅按个体分组 mutate(Change_x1 = x1 - lag(x1)) %>% ungroup() # 可选:取消分组,避免后续操作受分组影响
运行以上代码后,就能得到目标格式的结果:每个个体的第一年Change_x1为NA,后续年份为对应x1与上一年的差值。
内容的提问来源于stack exchange,提问作者Student In Need
相关产品推荐
相关产品推荐

