R语言for循环实现同一数据集跨年份经济指标列对比
用For循环批量对比两年的经济指标数据
嘿,我明白你的需求了——手里有分年份列的经济数据,想通过循环批量完成同指标两年的对比,不用手动一个个算对吧?我来给你一步步拆解怎么实现:
首先,先模拟一个和你结构一致的示例数据框(方便你直接测试),假设你的数据是这样的:
# 模拟你的数据结构:行是国家,列是分年份的经济指标 Economics_2_years <- data.frame( CountryID = c(9999, 8888, 7777, 6666, 5555), GDP_2015 = c(100, 200, 150, 300, 250), GDP_2016 = c(110, 210, 160, 320, 260), CPI_2015 = c(1.02, 1.01, 1.03, 1.00, 1.04), CPI_2016 = c(1.01, 1.02, 1.02, 1.01, 1.03), Export_2015 = c(50, 70, 60, 80, 90), Export_2016 = c(55, 75, 62, 85, 95) )
步骤1:筛选出两年的指标列
首先我们要把2015和2016年的指标列分别提取出来,确保它们一一对应(你说列顺序已经对齐,这一步会很顺畅):
# 提取所有2015年的指标列名 cols_2015 <- grep("_2015", colnames(Economics_2_years), value = TRUE) # 提取所有2016年的指标列名 cols_2016 <- grep("_2016", colnames(Economics_2_years), value = TRUE) # 提前校验:确保两年的指标数量一致(避免配对错误) stopifnot(length(cols_2015) == length(cols_2016))
步骤2:用For循环批量计算对比指标
接下来就可以用循环遍历每一对指标,计算你需要的对比值(比如增长率、差值,这里以增长率为例,你可以根据需求修改):
# 遍历每一组指标对 for (i in seq_along(cols_2015)) { # 获取当前循环的两年列名 current_col_2015 <- cols_2015[i] current_col_2016 <- cols_2016[i] # 提取指标名称(比如从"GDP_2015"中得到"GDP") indicator <- gsub("_2015", "", current_col_2015) # 计算增长率:(2016值 - 2015值)/2015值 growth_rate <- (Economics_2_years[[current_col_2016]] - Economics_2_years[[current_col_2015]]) / Economics_2_years[[current_col_2015]] # 将计算结果添加到原数据框,列名用"指标名_GrowthRate"命名 Economics_2_years[[paste0(indicator, "_GrowthRate")]] <- growth_rate # 如果需要计算差值,直接加这段代码: # diff_value <- Economics_2_years[[current_col_2016]] - Economics_2_years[[current_col_2015]] # Economics_2_years[[paste0(indicator, "_Diff")]] <- diff_value }
额外:如果你的列是成对相邻排列的
要是你的列是V1_2015紧接着V1_2016,V2_2015紧接着V2_2016这种结构,也可以用索引循环,代码会更简洁:
# 排除第一列(CountryID),获取所有指标列 all_indicator_cols <- colnames(Economics_2_years)[-1] # 步长为2循环,每次取相邻的两年列 for (i in seq(1, length(all_indicator_cols), 2)) { col_2015 <- all_indicator_cols[i] col_2016 <- all_indicator_cols[i+1] # 后面的计算逻辑和上面完全一致 indicator <- gsub("_2015", "", col_2015) growth_rate <- (Economics_2_years[[col_2016]] - Economics_2_years[[col_2015]]) / Economics_2_years[[col_2015]] Economics_2_years[[paste0(indicator, "_GrowthRate")]] <- growth_rate }
运行完代码后,你会看到原数据框新增了每一个指标的增长率列,比如GDP_GrowthRate、CPI_GrowthRate,不用手动一个个计算啦!
内容的提问来源于stack exchange,提问作者Danny
相关产品推荐
相关产品推荐

