如何将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
相关产品推荐
相关产品推荐

