如何在R的dplyr中计算分组数据的年度变量差值并匹配年份
解决分组计算连续年份变量差值并对齐年份的问题
你原来使用summarise的核心问题是:它会将每个分组的结果聚合为单行,直接丢失了年份维度,导致差值无法和对应年份绑定。要保留年份信息并让差值正确对齐,应该用mutate替代summarise,同时确保每组内的年份是按顺序排列的。
方案1:计算当前年份与前一年的差值(第一年显示NA)
这种方式下,差值对应当前年份相对于前一年的value变化绝对值,没有前一年数据的第一年显示NA:
df %>% group_by(group) %>% arrange(year) %>% # 必须确保年份有序,否则diff计算会出错 mutate(difference = abs(diff(value, lag = 1)))
运行结果:
| group | year | value | difference |
|---|---|---|---|
| 1 | 2017 | 10 | NA |
| 1 | 2018 | 20 | 10 |
| 1 | 2019 | 25 | 5 |
| 2 | 2017 | 5 | NA |
| 2 | 2018 | 10 | 5 |
| 2 | 2019 | 15 | 5 |
方案2:计算当前年份到下一年的差值(最后一年显示NA)
如果希望差值对应当前年份到下一年的value变化绝对值,可以用lead()函数将差值绑定到当前年份的行:
df %>% group_by(group) %>% arrange(year) %>% mutate(difference = abs(lead(value) - value))
运行结果:
| group | year | value | difference |
|---|---|---|---|
| 1 | 2017 | 10 | 10 |
| 1 | 2018 | 20 | 5 |
| 1 | 2019 | 25 | NA |
| 2 | 2017 | 5 | 5 |
| 2 | 2018 | 10 | 5 |
| 2 | 2019 | 15 | NA |
内容的提问来源于stack exchange,提问作者nemja
相关产品推荐
相关产品推荐

