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

基于两个数据框的参数加权计算需求

基于两个数据框的参数加权计算需求

嗨,我明白你需要用第二个数据框里的Desirability值,对第一个数据框的参数值做加权计算,公式是1 - (第一个表的参数值 / 第二个表对应参数的Desirability)对吧?我来给你用R实现这个需求,步骤很清晰:

首先,先把你提供的两个数据框加载到环境里:

# 第一个数据框:各样本的参数数值
df1 <- structure(list(`SE_HMWS (%) (2-8°C)` = c(0.125, 0.125, 0.285714285714286,
0.125, 0.25, 0.125, 0.222222222222222, 0.125, 0.125, 0.25), `SE_HMWS (%) (25±2°C)` = c(1,
0.875, 1, 0.875, 1.125, 0.875, 1.11111111111111, 0.875, 0.875,
1), `SE_HMWS (%) (40±2°C)` = c(5.875, 5.625, 6, 5.375, 6.5, 5.125,
5.66666666666667, 5.625, 5.375, 5.375), `SE_LMWS (%) (2-8°C)` = c(0.0434782608695652,
0, 0.0434782608695652, 0.0434782608695652, 0.0434782608695652,
0.0434782608695652, 0.0434782608695652, 0.0434782608695652, 0.0434782608695652,
0.0434782608695652), `SE_LMWS (%) (25±2°C)` = c(0.434782608695652,
0.434782608695652, 0.434782608695652, 0.391304347826087, 0.434782608695652,
0.434782608695652, 0.478260869565218, 0.434782608695652, 0.434782608695652,
0.391304347826087), `SE_LMWS (%) (40±2°C)` = c(2.60869565217391,
2.56521739130435, 2.52173913043478, 2.52173913043478, 2.52173913043478,
2.47826086956522, 2.52173913043478, 2.52173913043478, 2.56521739130435,
2.34782608695652), `SE_Monomer (%) (2-8°C)` = c(-0.00206398348813208,
-0.0010319917440661, -0.00206185567010309, -0.00206185567010309,
-0.00206611570247939, -0.00206398348813208, -0.00206611570247939,
-0.00206398348813208, -0.00206398348813208, -0.00206398348813208
), `SE_Monomer (%) (25±2°C)` = c(-0.018575851393189, -0.0175438596491229,
-0.0175257731958763, -0.0185567010309278, -0.018595041322314,
-0.0165118679050569, -0.021694214876033, -0.0175438596491229,
-0.0175438596491229, -0.0175438596491229), `SE_Monomer (%) (40±2°C)` = c(-0.109391124871001,
-0.107327141382869, -0.104123711340206, -0.105154639175258, -0.112603305785124,
-0.101135190918473, -0.112603305785124, -0.106295149638803, -0.105263157894737,
-0.100103199174407)), row.names = c("STD786_F1_225mg/mL - 50mM His/His.HCl, 150mM Arg.HCl, 70mM Pro, 0.02% PS80 - pH5.50-Glass vial",
"STD786_F10_225mg/mL - 50mM His/His.HCl, 110mM Arg.HCl, 135mM Pro, 0.02% PS80 - pH5.50-Glass vial",
"STD786_F2_225mg/mL - 50mM His/His.HCl, 165mM Arg.HCl, 135mM Pro, 0.02% PS80 - pH5.50-Glass vial",
"STD786_F3_225mg/mL - 50mM His/His.HCl, 110mM Arg.HCl, 135mM Pro, 0.02% PS80 - pH5.50-Glass vial",
"STD786_F4_225mg/mL - 50mM His/His.HCl, 110mM Arg.HCl, 45mM Pro, 0.02% PS80 - pH5.50-Glass vial",
"STD786_F5_225mg/mL - 50mM His/His.HCl, 70mM Arg.HCl, 200mM Pro, 0.02% PS80 - pH5.50-Glass vial",
"STD786_F6_225mg/mL - 50mM His/His.HCl, 70mM Arg.HCl, 70mM Pro, 0.02% PS80 - pH5.50-Glass vial",
"STD786_F7_225mg/mL - 50mM His/His.HCl, 150mM Arg.HCl, 200mM Pro, 0.02% PS80 - pH5.50-Glass vial",
"STD786_F8_225mg/mL - 50mM His/His.HCl, 110mM Arg.HCl, 225mM Pro, 0.02% PS80 - pH5.50-Glass vial",
"STD786_F9_225mg/mL - 50mM His/His.HCl, 55mM Arg.HCl, 135mM Pro, 0.02% PS80 - pH5.50-Glass vial"
), class = "data.frame")

# 第二个数据框:参数的Desirability和Importance
df2 <- structure(list(Parameters = c("SE_HMWS (%) (2-8°C)", "SE_HMWS (%) (25±2°C)",
"SE_HMWS (%) (40±2°C)", "SE_LMWS (%) (2-8°C)", "SE_LMWS (%) (25±2°C)",
"SE_LMWS (%) (40±2°C)", "SE_Monomer (%) (2-8°C)", "SE_Monomer (%) (25±2°C)",
"SE_Monomer (%) (40±2°C)"), Desirability = c(2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L), Importance = c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L)), row.names = c(NA, -9L), class = "data.frame")

接下来,我们把第二个数据框里的Desirability转换成一个命名向量,这样可以方便地和第一个数据框的列名(也就是参数名)一一对应:

# 生成参数名对应Desirability的命名向量
desirability_map <- setNames(df2$Desirability, df2$Parameters)

现在就可以用两种方法来计算加权结果了,你可以选自己习惯的:

方法1:用dplyr(tidyverse风格)

如果你平时用tidyverse系列包,这个方法更简洁:

library(dplyr)

# 对每一列应用计算规则:1 - (当前列值 / 对应参数的Desirability)
weighted_result <- df1 %>%
  mutate(across(everything(), ~ 1 - (.x / desirability_map[cur_column()])))

方法2:用基础R(不需要额外安装包)

如果你不想加载额外的包,基础R的方法也能实现:

# 遍历每个参数列,计算加权值
weighted_result <- as.data.frame(lapply(names(df1), function(param) {
  1 - (df1[[param]] / desirability_map[param])
}))

# 给结果框设置和原数据一致的列名和行名
names(weighted_result) <- names(df1)
row.names(weighted_result) <- row.names(df1)

这样得到的weighted_result就是你想要的最终结果啦!每个样本的每个参数都按照1 - (第一个表的参数值 / 第二个表对应参数的Desirability)公式计算完成,而且不管以后Desirability的数值有没有变化,这个代码都能自动匹配对应参数的值,不用手动修改。

备注:内容来源于stack exchange,提问作者Yann

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 11:32:38