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

R语言如何按值的±5区间条件合并dataframe并生成距离列

实现方案

你可以用tidyverse系列包快速实现需求,代码如下:

  1. 安装加载依赖包(已安装可跳过安装步骤)
install.packages("dplyr")
install.packages("tidyr")
library(dplyr)
library(tidyr)
  1. 核心处理代码
result <- df %>%
  # 生成a、b两列的所有两两组合
  cross_join(df1) %>%
  # 计算绝对差值
  mutate(distance = abs(a - b)) %>%
  # 筛选差值在±5范围内的结果
  filter(distance <= 5) %>%
  # 按a值、差值大小排序,匹配示例输出顺序
  arrange(a, distance) %>%
  # 可选:同一a值仅第一行显示a,其余行留空,匹配你的示例输出格式
  group_by(a) %>%
  mutate(a = ifelse(row_number() == 1, as.character(a), "")) %>%
  ungroup()

注:如果你的dplyr版本低于1.1.0不支持cross_join,可以将cross_join(df1)替换为full_join(df1, by = character())实现相同效果。

如果不想依赖第三方包,可以用base R实现:

# 生成所有a、b的组合
all_comb <- expand.grid(a = df$a, b = df1$b)
# 计算绝对差值
all_comb$distance <- abs(all_comb$a - all_comb$b)
# 过滤符合条件的行
result <- all_comb[all_comb$distance <= 5, ]
# 按a、差值排序
result <- result[order(result$a, result$distance), ]
# 可选:处理a列重复值显示
result$a <- as.character(result$a)
result$a[duplicated(result$a)] <- ""

运行上述代码后得到的result就是你需要的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:24:03