R语言基于双因子对数据框列求平均值的实现方法咨询
R实现多模型多轮运行结果聚合方案
你需要先从pred.name中提取模型标识,再按「变量名(name) + 变量取值(expl.val) + 模型标识」三个维度分组求均值即可,无需单独拆分RUN字段就能完成需求。
依赖包安装与加载
优先使用tidyverse生态的函数实现,代码更简洁易读:
# 首次使用先安装 install.packages("tidyverse") # 加载包 library(tidyverse)
核心处理代码
假设你的原始数据框名为df,直接运行以下代码即可得到符合要求的聚合结果:
df_agg <- df %>% # 提取模型标识:自动匹配pred.name中MODEL+数字的部分 mutate(model_id = str_extract(pred.name, "MODEL\\d+")) %>% # 按三个维度分组:变量名、变量取值、模型ID group_by(name, expl.val, model_id) %>% # 计算同一分组下3次运行的预测值均值 summarise(pred.val = mean(pred.val, na.rm = TRUE), .groups = "drop") %>% # 拼接成要求的pred.name格式 mutate(pred.name = paste0("RUNavg_", model_id)) %>% # 调整为你需要的列顺序 select(name, expl.val, pred.name, pred.val)
如果偏好base R实现,可使用以下代码:
# 提取模型标识 df$model_id <- gsub(".*_", "", df$pred.name) # 分组求均值 df_agg <- aggregate(pred.val ~ name + expl.val + model_id, data = df, FUN = mean, na.rm = TRUE) # 拼接pred.name字段 df_agg$pred.name <- paste0("RUNavg_", df_agg$model_id) # 调整列顺序 df_agg <- df_agg[, c("name", "expl.val", "pred.name", "pred.val")]
处理完成的df_agg可直接用于绘制响应曲线,每个变量每个取值下每个模型仅对应1条聚合后的结果,不会出现曲线混乱的问题。
内容的提问来源于stack exchange,提问作者Beardedant
相关产品推荐
相关产品推荐

