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

R语言含重复值的Inner_join:按分数阈值匹配合并tibble

解决按姓名匹配且分数差限制的数据框合并问题

问题分析

直接用inner_join()按person字段连接时,会对每个同名的观测做笛卡尔积匹配,所以Joe的2条test_1记录和2条test_2记录会生成4条组合。我们需要在匹配后添加分数差的过滤规则,只保留test_1与test_2差值绝对值≤5的行。

解决方案代码

library(dplyr)

# 原始数据
df1 <- tibble(person=c("Joe", "John", "Albert", "Joe", "John"), test_1=c(90, 91, 92,93, 94 ))
df2 <- tibble(person=c("Joe", "John", "Albert", "Joe"), test_2=c(94, 70, 93,50))

# 连接后过滤分数差符合条件的行
df3 <- inner_join(df1, df2, by = "person") %>%
  filter(abs(test_1 - test_2) <= 5)

# 输出结果
print(df3)

运行结果

# A tibble: 3 × 3
  person test_1 test_2
  <chr>   <dbl>  <dbl>
1 Joe        90     94
2 Albert     92     93
3 Joe        93     94

完全符合你期望的df4结构。

补充说明

如果后续有一对一匹配的需求(比如每个test_1记录仅匹配最接近的test_2记录),可以结合group_by()和slice_min()等函数实现,但当前场景下,上述过滤方法已满足需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:25:05