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

