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

使用tidyverse计算非基准模型与OM基准模型的运行差值

嘿,我完全get到你的需求了——要让每个非OM模型的每一次运行,都和OM模型同一次运行的数值做差值对比,对吧?之前的代码没对准「对应运行次」这个关键点,咱们用tidyverse来精准搞定它。

步骤1:先明确数据结构(附模拟数据)

假设你的数据是长格式,包含三列:model(模型名称,OM是基准)、run(运行次数,1/2/3)、value(每次运行的数值)。我先模拟一份符合要求的数据,你可以直接替换成自己的数据集:

library(tidyverse)

# 模拟4个模型各3次运行的数据
set.seed(123) # 固定随机数,方便复现
df <- tibble(
  model = rep(c("OM", "ModelA", "ModelB", "ModelC"), each = 3),
  run = rep(1:3, 4),
  value = rnorm(12, mean = 10, sd = 2)
)

步骤2:提取OM的基准数据

先把OM的3次运行数据单独拎出来,并重命名数值列,方便后续配对计算:

om_baseline <- df %>%
  filter(model == "OM") %>%
  rename(om_value = value) %>% # 把OM的数值列改名,避免和其他模型混淆
  select(run, om_value) # 只保留运行次数和OM的数值

步骤3:配对计算差值

用left_join按照「运行次数(run)」把原数据和OM基准数据配对,这样每个模型的每一次运行,都能对应到OM同一次运行的数值,再计算差值:

result <- df %>%
  left_join(om_baseline, by = "run") %>% # 按run配对,确保同次运行对应
  mutate(value_diff = value - om_value) %>% # 计算当前模型值 - OM对应run的值
  filter(model != "OM") %>% # 可选:过滤掉OM自己的行(差值为0,没必要保留)
  select(model, run, value, om_value, value_diff) # 整理输出列的顺序

看看结果

运行完上面的代码,你会得到这样的结果(以模拟数据为例):

# A tibble: 9 × 5
  model   run value om_value value_diff
  <chr> <int> <dbl>    <dbl>      <dbl>
1 ModelA    1  9.43     8.89      0.542
2 ModelA    2  9.94    10.4      -0.473
3 ModelA    3 10.9     10.9       0.046
4 ModelB    1  7.95     8.89     -0.940
5 ModelB    2 11.0     10.4       0.594
6 ModelB    3 11.6     10.9       0.720
7 ModelC    1  9.48     8.89      0.590
8 ModelC    2  9.80    10.4      -0.595
9 ModelC    3  9.60     10.9      -1.29

这里的value_diff就是你要的「每个模型每次运行与对应OM运行的差值」啦!

关键说明

  • 核心逻辑是按run配对,而不是按模型分组计算,这才解决了你之前代码只算模型内差值的问题。
  • 如果你的run列不是数字(比如是字符串、日期),只要它能唯一标识每一次运行,这个方法完全适用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:55:28