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

R语言使用dplyr跨多列批量生成年度均值与相对均值变量的方法

最优实现方案

直接使用dplyr 1.0.0及以上版本支持的across()函数即可一步完成需求,无需拆分步骤,代码简洁易维护,完全匹配命名要求:

library(dplyr)

# 1. 定义需要生成衍生变量的目标变量,仅需修改此处适配你的6个变量即可
target_vars <- c("var1", "var2", "var3", "var.4")

# 2. 分组生成两组新变量
df_new <- data %>%
  group_by(year) %>%
  mutate(
    # 生成年度跨国家均值,命名格式为mean_varX
    across(all_of(target_vars), ~mean(., na.rm = TRUE), .names = "mean_{.col}"),
    # 生成国家取值相对年度均值的比值,命名格式为relmean_varX
    across(all_of(target_vars), ~./get(paste0("mean_", cur_column())), .names = "relmean_{.col}")
  ) %>%
  ungroup() # 不需要后续分组操作可解开分组

运行上述代码后输出结果与你给出的示例结构完全匹配,以var1为例:1910年跨国家均值为3,GER的相对比值为1/3≈0.333,FRA的相对比值为5/3≈1.667,符合预期。


你之前代码报错的核心原因

  • 第一次报错是因为管道符%>%默认将左侧结果传入右侧函数的第一个参数,你调用map2_dfr时第一个参数已经被传入了df,但函数内部又调用了不存在的对象d.test,对象匹配逻辑混乱
  • 第二次报错是因为map2的输入参数需要是全局环境中存在的对象,你直接写的var1是数据框内的列名,不在全局环境中,所以无法识别

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:45:05