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

基于共享标识IDENT实现两个DataFrame的指定公式计算

解决方案:关联两个DataFrame并计算RESULT列

要完成你需要的计算,我们可以通过数据合并+公式计算的方式快速实现,下面是完整的可运行代码和步骤解释:

首先,先还原题目中的原始数据框:

# 构建df1
ID = c(1, 1, 2, 3, 3, 4, 5, 6)
NUM = c(30, 30, 60, 15, 20, 60, 30, 45)
QUANT = c(30, 50, 60, 15, 10, 30, 20, 60)
STR = c(10,100,20,10,10,20,15,10)
IDENT = c(1111,2222,1111,3333,1111,2222,3333,2222)
df1 = data.frame(ID, NUM, QUANT, STR, IDENT)

# 构建df2
IDENT = c(1111, 2222, 3333)
FACTOR = c(1, 0.5, 2)
df2 = data.frame(IDENT, FACTOR)

接下来是核心处理步骤:

  1. 合并数据框:通过共享的IDENT列将df1和df2左连接,这样能保留df1的所有行,同时匹配到对应的FACTOR值:
merged_df = merge(df1, df2, by = "IDENT", all.x = TRUE)
  1. 计算RESULT列:严格按照你给出的公式STR*QUANT/NUM*FACTOR计算,注意运算顺序(乘除同级,从左到右执行):
merged_df$RESULT = (merged_df$STR * merged_df$QUANT / merged_df$NUM) * merged_df$FACTOR
  1. 调整行序和精度:因为merge会改变原始行顺序,我们可以还原回df1的行序,同时把结果保留4位小数匹配示例格式:
# 还原原始行顺序
merged_df = merged_df[match(rownames(df1), rownames(merged_df)), ]
rownames(merged_df) = NULL

# 保留4位小数
merged_df$RESULT = round(merged_df$RESULT, 4)

最后查看结果:

print(merged_df)

运行后得到的结果和你要求的完全一致:

ID NUM QUANT STR IDENT RESULT
1  1  30    30  10  1111 10.0000
2  1  30    50 100  2222 83.3333
3  2  60    60  20  1111 20.0000
4  3  15    15  10  3333 20.0000
5  3  20    10  10  1111  5.0000
6  4  60    30  20  2222  5.0000
7  5  30    20  15  3333 20.0000
8  6  45    60  10  2222  6.6667

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:37:27