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

如何将SDI设为各国最早年份常量并计算ODA人均值?

解决方案:SDI常量设置与ODA人均值计算

前提说明

你的示例数据缺少SDI和Population变量,以下解决方案会先补充模拟数据,再完成两个需求的实现,使用dplyr包(R中常用的数据处理工具)来高效批量处理。


步骤1:准备完整数据(含模拟的SDI、Population)

# 加载dplyr包(未安装先运行:install.packages("dplyr"))
library(dplyr)

# 原始示例数据
Country = c("Afghanistan", "Algeria","Angola","Argentina","Armenia",
            "Bangladesh","Belarus","Benin","Bhutan","Brazil")
year = c("2013", "2017", "2005", "2009", "2005", 
         "2009", "2005", "2005", "2009", "2005" )
ODA = c("5239070000", "2186920000", "1667990000","2102860000",
        "215700000","1943200000","141020000",
        "379850000","163570000","21630120000")

# 模拟SDI和Population数据(匹配原始数据行)
SDI = c(0.45, 0.72, 0.51, 0.83, 0.70, 0.58, 0.75, 0.48, 0.62, 0.79)
Population = c(32269589, 41318142, 19618432, 43024374, 3010600,
               153546901, 9498700, 10879823, 797765, 191796000)

# 创建数据框并转换数据类型
df = data.frame(Country, year, ODA, SDI, Population) %>%
  mutate(
    year = as.integer(year),
    ODA = as.numeric(ODA)
  )

步骤2:实现需求1——将SDI设为各国最早年份的常量

按国家分组,提取每组最早年份对应的SDI值,赋值给该组所有行:

df_processed = df %>%
  group_by(Country) %>%
  # 标记当前国家的最早年份
  mutate(earliest_year = min(year)) %>%
  # 用最早年份的SDI覆盖所有行的SDI
  mutate(SDI = SDI[year == earliest_year]) %>%
  # 移除临时辅助列
  select(-earliest_year) %>%
  ungroup()

步骤3:实现需求2——计算ODA人均值

直接新增列,用对应年份的ODA除以人口:

df_processed = df_processed %>%
  mutate(ODA_per_capita = ODA / Population)

最终效果

处理后的df_processed数据框中:

  • 每个国家所有年份的SDI值统一为该国最早年份的数值
  • 新增ODA_per_capita列,存储对应年份的ODA人均值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:53:35