如何在gapminder数据集正确计算各国历年预期寿命的年度差值?
解决Gapminder数据集中国家历年预期寿命变化计算问题
错误原因分析
- 首次尝试的问题:仅按
country分组但未对年份排序,数据集默认行顺序并非按国家内的年份递增排列,导致lag(lifeExp)取到的是其他国家的行值,而非当前国家上一年的预期寿命。 - 二次尝试的问题:同时按
country和year分组后,每个分组仅包含单一行数据,lag()无法找到前一行参考值,因此所有inc结果为NA。
正确实现代码
library(gapminder) library(tidyverse) explife <- gapminder %>% group_by(country) %>% arrange(year, .by_group = TRUE) # 核心:在每个国家组内按年份升序排列 mutate(inc = lifeExp - lag(lifeExp)) %>% select(country, year, lifeExp, inc) %>% arrange(desc(inc)) print(explife)
代码关键说明
arrange(year, .by_group = TRUE):强制每个国家组内的行按年份从小到大排列,保证lag(lifeExp)能准确匹配当前国家的上一年数据。- 仅需按
country分组即可,无需加入year——我们需要的是每个国家自身的时间序列差值,而非单一年份内的分组计算。 tidyverse已包含dplyr、tidyr、readr等依赖包,无需重复加载。
内容的提问来源于stack exchange,提问作者Warsame
相关产品推荐
相关产品推荐

