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

在R中如何基于另一数据框的分类值对大数据框执行乘法运算?

R语言实现匹配分类字段并计算新列的方法

首先给出可直接运行的示例数据构造代码,方便测试验证:

# 构造小数据框
df_small <- data.frame(
  travel = c("bike", "car", "walk"),
  time = c(2.5, 1.0, 5.0)
)

# 构造大数据框
df_large <- data.frame(
  year = c(2010, 2010, 2010, 2011, 2011, 2010),
  travel = c("bike", "car", "walk", "car", "walk", "bike"),
  rate = c(25, 70, 9.2, 71, 8.2, 23.1)
)

实现方法

方法1:tidyverse(dplyr)实现(推荐,代码可读性高)

适合日常数据处理场景,逻辑清晰易维护:

library(dplyr)

df_result <- df_large %>%
  # 按travel字段左连接匹配小数据框的time值
  left_join(df_small, by = "travel") %>%
  # 计算距离列,不需要保留time列可再加 %>% select(-time)
  mutate(distance = rate * time)

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

两种可选写法:

  • 写法1:merge合并后计算
# 按travel字段合并,all.x=TRUE保证大数据框所有行都被保留
df_merge <- merge(df_large, df_small, by = "travel", all.x = TRUE)
# 新增distance列
df_merge$distance <- df_merge$rate * df_merge$time
  • 写法2:命名向量快速匹配(更适合小映射表场景,运行速度更快)
# 把小数据框转成"出行类型-时间"的命名映射向量
time_map <- setNames(df_small$time, df_small$travel)
# 直接匹配计算,无需合并数据框
df_large$distance <- df_large$rate * time_map[df_large$travel]

结果示例

最终输出的distance列计算结果如下:

yeartravelratedistance
2010bike25.062.5
2010car70.070.0
2010walk9.246.0
2011car71.071.0
2011walk8.241.0
2010bike23.157.75

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:54:04