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

如何基于日期匹配另一数据框列值,实现多列乘法运算?

解决R数据框按日期+货币匹配计算乘积的问题

我来帮你搞定这个需求!首先得先把你的两个数据框正确创建出来(原代码里的格式有点小问题,我帮你修正了,这样你可以直接复制运行):

# 创建test数据框
test <- read.table(text = "var1 var2 var3 var4
1 12/12/2017 CAD 10
2 20/02/2018 CAD 30
3 14/03/2016 USD 44
4 10/05/2000 KOR 56
5 04/04/2016 GBP 45", header = TRUE)

# 创建test2数据框
test2 <- read.table(text = "date USD CAD KOR GBP
12/12/2017 1 2 0.1 2
20/02/2018 2 1 0.8 1
14/03/2016 3 4 1.0 4
10/05/2000 4 5 0.6 5
04/04/2016 5 1 1.0 1", header = TRUE)

你的核心需求是:根据test里的日期(var2)和货币类型(var3),匹配test2中对应日期的货币汇率,然后用这个汇率去乘test里的数值(这里看数据应该是var4,因为var3是货币代码)。下面给你两种实用的实现方法:

方法一:使用tidyverse工具包(推荐,代码更直观易读)

tidyverse里的dplyr和tidyr能轻松搞定这种宽转长+匹配计算的需求:

# 先加载tidyverse包(如果没安装先运行install.packages("tidyverse"))
library(tidyverse)

# 把test2从宽格式转成长格式,方便和test匹配
test2_long <- test2 %>%
  pivot_longer(
    cols = -date,  # 除了date列之外的所有列都要转
    names_to = "currency",  # 原列名(货币代码)作为新列currency的值
    values_to = "exchange_rate"  # 原单元格的值作为汇率列
  )

# 合并两个数据框,然后计算乘积
result <- test %>%
  left_join(
    test2_long,
    by = c("var2" = "date", "var3" = "currency")  # 按日期和货币匹配
  ) %>%
  mutate(
    var4_adjusted = var4 * exchange_rate  # 计算调整后的数值
  )

# 查看结果
print(result)

运行后你会得到包含原数据、汇率和乘积结果的新数据框,一目了然。

方法二:使用Base R原生函数(无需额外安装包)

如果你不想加载第三方包,用Base R的reshape和merge函数也能实现:

# 把test2转成长格式
test2_long <- reshape(
  test2,
  varying = colnames(test2)[-1],  # 指定要转换的列(除了date)
  v.names = "exchange_rate",  # 汇率列的名称
  timevar = "currency",  # 货币列的名称
  times = colnames(test2)[-1],  # 货币代码的取值
  direction = "long"  # 转换为长格式
)

# 去掉自动生成的id列,保留需要的字段
test2_long <- test2_long[, c("date", "currency", "exchange_rate")]

# 合并test和转换后的test2
merged_data <- merge(
  test,
  test2_long,
  by.x = c("var2", "var3"),  # test里的匹配列
  by.y = c("date", "currency")  # test2_long里的匹配列
)

# 计算乘积
merged_data$var4_adjusted <- merged_data$var4 * merged_data$exchange_rate

# 查看结果
print(merged_data)

这两种方法都能完美实现你的需求,选你用着顺手的就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:05:19