如何合并两个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
相关产品推荐
相关产品推荐

