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

如何合并两个DataFrame:筛选范围包含指定值的对应行

匹配DataFrame中的位置范围

先给出输入的两个数据框:

df1 <- data.frame(TypeA=paste0("A",1:3), Position=c(1, 5, 9))
df2 <- data.frame(TypeB=paste0("B",1:5),StartPosition=c(0, 3, 7, 8,  20), EndPosition=c(2, 4, 8, 18, 25))

需求:筛选出df2中StartPosition到EndPosition的区间包含df1中Position值的行,并关联对应的TypeA,预期结果如下:

TypeB   StartPosition EndPosition  TypeA
B1      0             2            A1
B4      8             18           A3

解决方案

方法1:使用dplyr包(代码更简洁清晰)

library(dplyr)

result <- df1 %>%
  cross_join(df2) %>%
  filter(Position >= StartPosition & Position <= EndPosition) %>%
  select(TypeB, StartPosition, EndPosition, TypeA)

print(result)

方法2:基础R实现

# 生成两个数据框的全组合
all_combinations <- merge(df1, df2, all = TRUE)
# 筛选位置落在区间内的行
result <- subset(all_combinations, Position >= StartPosition & Position <= EndPosition)
# 调整列顺序匹配预期格式
result <- result[, c("TypeB", "StartPosition", "EndPosition", "TypeA")]

print(result)

两种方法的核心逻辑一致:先生成两个数据框的所有组合,再筛选出符合位置区间条件的行,最后调整列顺序得到目标结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:33:17