基于共享标识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)
接下来是核心处理步骤:
- 合并数据框:通过共享的
IDENT列将df1和df2左连接,这样能保留df1的所有行,同时匹配到对应的FACTOR值:
merged_df = merge(df1, df2, by = "IDENT", all.x = TRUE)
- 计算RESULT列:严格按照你给出的公式
STR*QUANT/NUM*FACTOR计算,注意运算顺序(乘除同级,从左到右执行):
merged_df$RESULT = (merged_df$STR * merged_df$QUANT / merged_df$NUM) * merged_df$FACTOR
- 调整行序和精度:因为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
相关产品推荐
相关产品推荐

