首页 > 解决方案 > 使用 R 中另一个表的范围内的表中的点连接

问题描述

假设我有 2 张桌子:

df1:

start end
15    20
22    32
35    52

df2:

point 
12 
16
17    
21  
26   
31   
43  

我想加入这两个表,以便我知道哪些点在范围之间:

start end  point
15    20   16
15    20   17
22    32   26
22    32   31
35    52   43

我如何在 R 中做到这一点?我知道当 2 个表有开始和结束时加入 2 个表,我可以使用foverlap,但是当其中一个表只有一个点时,我不知道该怎么做。

标签: rjoin

解决方案


我们可以用fuzzy_join

library(fuzzyjoin)
fuzzy_inner_join(df1, df2, by = c('start' = 'point', 'end' = 'point'),
        match_fun = list(`<=`, `>=`))
# A tibble: 5 x 3
#  start   end point
#  <int> <int> <int>
#1    15    20    16
#2    15    20    17
#3    22    32    26
#4    22    32    31
#5    35    52    43

数据

df1 <- structure(list(start = c(15L, 22L, 35L), end = c(20L, 32L, 52L
)), class = "data.frame", row.names = c(NA, -3L))

df2 <- structure(list(point = c(12L, 16L, 17L, 21L, 26L, 31L, 43L)), class = "data.frame", row.names = c(NA, 
-7L))

推荐阅读