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

Rstudio中跨两个表使用if函数实现欧元美元金额换算为英镑的问题

R语言实现多币种金额按日期汇率换算为英镑的方案

首先先做数据预处理,你提供的示例数据中Amount和Rate字段都是字符格式,需要先转为数值型才能计算:

# 预处理消费表
DF$Amount <- as.numeric(DF$Amount)
# 预处理汇率表
XR$Rate <- as.numeric(XR$Rate)

方案1:基础R实现(无需加载第三方包)

使用merge函数匹配对应日期和币种的汇率,逻辑等价于Excel的VLOOKUP,之后结合ifelse判断计算换算后金额即可:

# 按日期、币种合并两张表,保留消费表的所有行
merge_df <- merge(DF, XR, by.x = c("Date", "Currency"), by.y = c("Date", "Country"), all.x = TRUE)
# 计算换算为英镑的金额,GBP直接保留原金额
merge_df$GBP_Amount <- ifelse(merge_df$Currency == "GBP", merge_df$Amount, merge_df$Amount * merge_df$Rate)
# 可选:删除多余的Rate列,保留原表结构
merge_df$Rate <- NULL

运行后你提到的测试用例(2021年1月2日Person B消费150欧元)会得到150 * 6 = 900的结果,完全符合需求。

方案2:tidyverse/dplyr实现(语法更简洁)

如果常用tidyverse生态,用left_join实现匹配逻辑可读性更高:

library(dplyr)
result <- DF %>%
  left_join(XR, by = c("Date" = "Date", "Currency" = "Country")) %>%
  mutate(GBP_Amount = ifelse(Currency == "GBP", Amount, Amount * Rate)) %>%
  select(-Rate) # 可选删除汇率列

说明:两种方案都默认你所有非GBP的币种都能在汇率表中找到对应日期的汇率,如果存在缺失汇率的情况,可以在ifelse中补充异常值处理逻辑。如果确实需要逐行遍历的if判断逻辑,也可以用for循环或者apply系列函数实现,但数据量大时性能远低于上面的合并匹配方案,更推荐优先使用上述两种方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:15:03