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

在R中实现类似Excel VLOOKUP的取最大值关联匹配功能

在R中实现匹配Item并返回Max1最大值及对应字段的功能

需求:基于Book3的Item列表,从Book4中提取每个Item对应的Max1最大值所在行的全部字段(包括Additional1、Additional2),实现类似Excel带条件的VLOOKUP效果。

示例数据

先构造可测试的示例数据框:

# 目标Item列表
Book3 <- data.frame(Item = c("A", "B", "C"))

# 包含明细数据的数据集
Book4 <- data.frame(
  Item = c("A", "A", "B", "B", "C"),
  Max1 = c(10, 20, 5, 15, 25),
  Additional1 = c("X1", "X2", "Y1", "Y2", "Z1"),
  Additional2 = c("P1", "P2", "Q1", "Q2", "R1")
)

方法一:使用dplyr包(推荐,代码简洁易读)

dplyr的分组和筛选函数可以快速实现需求:

library(dplyr)

# 1. 从Book4中提取每个Item的Max1最大值对应行
max_rows <- Book4 %>%
  group_by(Item) %>%
  slice_max(order_by = Max1, n = 1) %>% # 取每组Max1最大的1行
  ungroup()

# 2. 与Book3做左连接,确保保留所有目标Item
result <- Book3 %>%
  left_join(max_rows, by = "Item")
  • 若某个Item存在多个相同的Max1最大值,slice_max默认会返回所有符合条件的行;如需仅返回其中一行,添加参数with_ties = FALSE即可。
  • left_join保证Book3中的所有Item都被保留,若Book4中无对应Item,对应字段会显示NA。

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

如果不想加载第三方包,可用Base R实现:

# 1. 计算每个Item的Max1最大值
max_vals <- tapply(Book4$Max1, Book4$Item, max)

# 2. 筛选出Book4中Max1等于对应Item最大值的行
max_rows_base <- Book4[Book4$Max1 == max_vals[Book4$Item], ]

# 3. 合并到Book3,保留所有目标Item
result_base <- merge(Book3, max_rows_base, by = "Item", all.x = TRUE)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:35:28