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

如何使用dplyr的group_by/mutate实现多组内最近值匹配生成结果列

使用dplyr实现同id下最接近值匹配

前置准备

首先构造你提供的两份示例数据,代码如下:

library(dplyr)

# 数据1
df1 <- tibble(
  id1 = c(1,1,1,1,2,2,3,4),
  value1 = c(98, 101, 118, 170, 95, 201, 160, 70)
)

# 数据2
df2 <- tibble(
  id2 = c(1,1,2,2,3),
  value2 = c(100, 120, 105, 200, 300)
)

实现代码

仅使用dplyr自带函数即可完成需求,逻辑如下:

result <- df1 %>%
  # 按id左连接两份数据,同id的df1行会匹配到所有同id的df2的value2
  left_join(df2, by = c("id1" = "id2")) %>%
  # 按df1的id1和value1分组,保证每个原始df1的行独立成组
  group_by(id1, value1) %>%
  # 每组内计算差的绝对值,取差最小的value2,无匹配时返回NA
  summarise(
    value2 = ifelse(all(is.na(value2)), NA_real_, value2[which.min(abs(value1 - value2))]),
    .groups = "drop" # 统计完成后自动取消分组
  )

如果存在两个value2和value1差值完全相等的情况,上述代码会默认取排序在前的value2,你可以根据需求调整取值规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:36:04