You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让diff()函数生效?无法用lag()/lead()计算预期寿命增幅

计算各国预期寿命增幅:diff()函数报错的解决办法

问题描述

尝试计算各国预期寿命增幅时,diff()函数无法正常工作,且不能使用lag()/lead()函数。使用的代码如下:

library(gapminder)
gm <- gapminder
inclife <- gm %>%
  drop_na(lifeExp)%>%
  group_by(country) %>%
  select(country, year, lifeExp) %>%
  mutate(inc = diff(lifeExp))

出现的错误信息:

Error in `mutate()`:
! 计算 `inc = diff(lifeExp)` 时出现问题。
✖ `inc` 的长度必须是12或1,而不是11。
ℹ 错误出现在第1组:country = "Afghanistan"。
运行 `rlang::last_error()` 查看错误发生位置。

错误原因

diff(lifeExp)会计算相邻元素的差值,返回的结果长度比每组原始数据少1(比如阿富汗组有12条数据,diff后得到11个差值),而mutate要求新生成的列必须和原数据行数完全一致,因此触发了长度不匹配的错误。

解决方案

通过给diff()的结果前面添加一个NA值,让新列的长度和每组数据的行数匹配。修改后的代码如下:

library(gapminder)
gm <- gapminder
inclife <- gm %>%
  drop_na(lifeExp)%>%
  group_by(country) %>%
  select(country, year, lifeExp) %>%
  mutate(inc = c(NA, diff(lifeExp)))

修改后,每组的inc列开头会有一个NA(表示第一年没有前一年的对比数据,无法计算增幅),后续数值则为对应年份与上一年的预期寿命差值,完美匹配原数据行数,不会再报错。

内容的提问来源于stack exchange,提问作者Warsame

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 05:55:14