在R中基于数据框滞后行的另一列计算raw_gdp值
计算分组累计raw_gdp的实现方法
你可以通过dplyr包的分组、排序和滞后计算来实现需求,核心逻辑是按sim_num分组后,从初始GDP值开始,逐行用前一行的raw_gdp乘以当前行的增长系数:
# 加载dplyr包(未安装的话先运行install.packages("dplyr")) library(dplyr) # 定义初始GDP值 initial_raw_gdp <- 555690000000 # 处理数据框 gdp <- gdp %>% # 按模拟编号分组,确保每组内日期按时间顺序排列 group_by(sim_num) %>% arrange(date, .by_group = TRUE) %>% # 计算raw_gdp:第一行用初始值,后续行用前一行值乘以增长系数 mutate( raw_gdp = case_when( row_number() == 1 ~ initial_raw_gdp, TRUE ~ lag(raw_gdp) * (1 + gdp_change / 100) ) ) %>% # 取消分组 ungroup()
逻辑说明
group_by(sim_num):让每个模拟编号的数据独立计算,互不干扰arrange(date, .by_group = TRUE):强制每组内的日期按升序排列,避免因数据顺序混乱导致计算错误case_when+lag(raw_gdp):第一行直接赋值初始GDP,后续行调用前一行的raw_gdp,乘以(1 + gdp_change/100)得到当前行的GDP值
验证结果
运行后检查对应行的结果:
- sim_num=1的2023-03-31行:
555690000000*(1+1.2992509/100) = 562909807326,与示例一致 - sim_num=2的2023-03-31行:
555690000000*(1-0.846561/100) = 550985745179,与示例一致
内容的提问来源于stack exchange,提问作者Renegade_rm56
相关产品推荐
相关产品推荐

