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

R语言如何按匹配键对两个数据框的同名指定列逐行相乘

R数据框按联合主键匹配后同名列乘积计算方案

你考虑用左连接实现的思路完全可行,核心逻辑是连接时为两个来源的同名字段加后缀区分,匹配完成后直接对同名字段做向量乘法,最后清理中间列即可。

方法1:dplyr实现(代码简洁易读,最常用)

加载dplyr包后按左连接逻辑处理:

library(dplyr)

newDataframe <- dataframe1 %>%
  # 按Period、Code联合主键做左连接,保留dataframe1全部行
  left_join(dataframe2, by = c("Period", "Code"), suffix = c("_df1", "_df2")) %>%
  # 计算两表匹配行的a、c列乘积
  mutate(
    a = a_df1 * a_df2,
    c = c_df1 * c_df2
  ) %>%
  # 移除连接生成的中间列,保留目标字段
  select(Period, Code, a, c)

运行后得到的结果完全匹配需求:

PeriodCodeac
2014-01-13ABC0.11.6
2015-01-13ABC1.08.1
2015-01-13LMZ1.22.0
2016-01-13LMZ1.24.4

方法2:base R实现(无需安装第三方包)

不依赖外部拓展包的原生实现代码如下:

# 以dataframe1为基准做左连接合并
merge_res <- merge(
  x = dataframe1,
  y = dataframe2,
  by = c("Period", "Code"),
  all.x = TRUE,
  suffixes = c("_df1", "_df2")
)
# 计算列乘积
merge_res$a <- merge_res$a_df1 * merge_res$a_df2
merge_res$c <- merge_res$c_df1 * merge_res$c_df2
# 筛选保留最终需要的字段
newDataframe <- merge_res[, c("Period", "Code", "a", "c")]

注意事项

如果dataframe1中存在主键无法在dataframe2中匹配的行,对应a、c列的计算结果会返回NA,可根据业务需要在乘法计算后对NA值做替换,比如填充0或者其他默认值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:57:18