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

如何在DataFrame中按国家分组计算人均GDP年度百分比变化

问题

已编写代码计算变量的年度百分比变化,现需扩展功能:针对包含多国历年人均GDP的DataFrame,按国家分组计算各国历年人均GDP的百分比变化。现有代码未加入分组逻辑,需结合group_by()实现该需求。

现有代码:

df |>
  mutate(pdiff = 100*(gdp_per_capita - lag(gdp_per_capita))/gdp_per_capita)

示例数据:

df <- data.frame(
  Country_Name = rep(c("Albania", "Algeria", "Bosnia", "Croatia"), each = 4),
  year = rep(2018:2021, 4),
  gdp_per_capita = c(5287.664, 5396.216, 5332.160, 6494.386,
                     4142.019, 3989.668, 3306.858, 3765.035,
                     6070.353, 6119.762, 6082.367, 6916.438,
                     15227.560, 15311.767, 14132.487, 17398.766)
)

解决方案

只需在mutate()之前添加group_by(Country_Name),让lag()函数在每个国家的分组内计算前一年的人均GDP值,即可实现按国家分组的年度百分比变化计算:

library(dplyr)

df |>
  group_by(Country_Name) |>
  mutate(pdiff = 100*(gdp_per_capita - lag(gdp_per_capita))/gdp_per_capita) |>
  ungroup()  # 可选:取消分组,恢复普通DataFrame结构

说明

  • group_by(Country_Name):将数据按国家分组,后续的mutate操作会在每个组内独立执行
  • lag(gdp_per_capita):在每个国家组内,获取上一年的人均GDP值,因此每个国家的第一年(如2018年)会返回NA(无前置数据)
  • ungroup():可选操作,若后续不需要保留分组结构,可取消分组,避免后续操作受分组影响

运行结果示例

执行代码后,数据会新增pdiff列,部分结果如下:

# A tibble: 16 × 4
   Country_Name  year gdp_per_capita  pdiff
   <chr>        <int>          <dbl>  <dbl>
 1 Albania       2018          5288. NA    
 2 Albania       2019          5396.  2.01 
 3 Albania       2020          5332. -1.20 
 4 Albania       2021          6494.  17.9  
 5 Algeria       2018          4142. NA    
 6 Algeria       2019          3990. -3.82 
 7 Algeria       2020          3307. -20.6  
 8 Algeria       2021          3765.  12.2  
# … with 8 more rows

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:01:17