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

R语言中如何处理以变量为名称的循环?求和问题求助

解决方案:按国家代码批量求和消费数据列

你的代码核心问题是没有动态解析变量i对应的列名,直接写**i**_final consumption P.3h会被当成固定字符串,而非变量i的取值;同时循环中每次都会覆盖结果,没有累积生成所有国家的求和列。以下是两种可行的解决方案:

方法一:修正循环写法

# 初始化结果数据框,保留原df的所有内容
df_all_countries <- df

# 遍历每个国家代码
for (i in country) {
  # 动态生成对应列的名称
  col_final <- paste0(i, "_final consumption P.3h")
  col_other <- paste0(i, "_other consumption P.3n")
  
  # 计算两列的和,作为新列添加到结果数据框
  df_all_countries[[paste0("fd_", i)]] <- FD[[col_final]] + FD[[col_other]]
}

方法二:用tidyverse批量处理(更简洁)

利用dplyr的across函数批量处理所有国家的列,无需循环:

library(dplyr)
library(stringr)

df_all_countries <- df %>%
  bind_cols(
    FD %>%
      mutate(
        across(
          # 匹配所有以国家代码开头、结尾为P.3h的列
          starts_with(country) & ends_with("P.3h"),
          # 找到对应国家的P.3n列并求和
          ~ . + get(str_replace(cur_column(), "P.3h", "P.3n")),
          # 定义新列名格式为fd_国家代码
          .names = "fd_{str_remove(cur_column(), '_final consumption P.3h')}"
        )
      ) %>%
      # 只保留生成的求和列
      select(starts_with("fd_"))
  )

或者用purrr的map函数批量生成列:

library(dplyr)
library(purrr)
library(rlang)

# 批量生成每个国家的求和列
fd_cols <- map(country, function(i) {
  FD %>%
    transmute(!!paste0("fd_", i) := !!sym(paste0(i, "_final consumption P.3h")) + !!sym(paste0(i, "_other consumption P.3n")))
})

# 合并到原df中
df_all_countries <- df %>% bind_cols(!!!fd_cols)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:02:40