如何使用IRanges一次性模糊连接多个数据帧

如何使用IRanges一次性模糊连接多个数据帧,r,fuzzyjoin,R,Fuzzyjoin,我需要基于不精确匹配连接多个数据帧,这可以使用fuzzyjoin和IRanges包实现: 数据: 结果: df123 line start end v2 v3 1 1 75 100 D a 2 1 75 100 D b 3 2 100 150 D b 4 2 100 150 E b 5 2 100 150 F b 6 3 170 190 I b 7 4 240 3

我需要基于不精确匹配连接多个数据帧,这可以使用
fuzzyjoin
IRanges
包实现:

数据:

结果:

df123  
  line start end v2   v3
1    1    75 100  D    a
2    1    75 100  D    b
3    2   100 150  D    b
4    2   100 150  E    b
5    2   100 150  F    b
6    3   170 190  I    b
7    4   240 300  J <NA>
8    4   240 300  K <NA>
9    4   240 300  F <NA>
df123
线路起始端v2 v3
每年175100天
2 1 75 100 D b
31200150丁苯
4200150东海岸
52100150fB
63170190IB
74240300J
84240300K
94240300F

这一切都很好,但在我的实际数据中,我有多个数据帧要连接,然后,逐个连接是不切实际和容易出错的。如何一次完成所有数据帧的连接?

将数据帧放入列表中,并使用
Reduce
连接数据帧

library(fuzzyjoin)
library(dplyr)

join_two_dataframes <- function(df1, df2) {
  interval_left_join(x = df1,
                     y = df2,
                     by = c("start", "end")) %>%
    select(-c(start.y, end.y)) %>%
    rename(start = start.x, end = end.x)
}

list_df <- list(df1, df2, df3)
Reduce(join_two_dataframes, list_df)

#  line start end v2   v3
#1    1    75 100  D    a
#2    1    75 100  D    b
#3    2   100 150  D    b
#4    2   100 150  E    b
#5    2   100 150  F    b
#6    3   170 190  I    b
#7    4   240 300  J <NA>
#8    4   240 300  K <NA>
#9    4   240 300  F <NA>
库(fuzzyjoin)
图书馆(dplyr)
连接两个数据帧%
选择(-c(开始.y,结束.y))%>%
重命名(开始=开始.x,结束=结束.x)
}

list_df将数据帧放入列表中,并使用
Reduce
连接数据帧

library(fuzzyjoin)
library(dplyr)

join_two_dataframes <- function(df1, df2) {
  interval_left_join(x = df1,
                     y = df2,
                     by = c("start", "end")) %>%
    select(-c(start.y, end.y)) %>%
    rename(start = start.x, end = end.x)
}

list_df <- list(df1, df2, df3)
Reduce(join_two_dataframes, list_df)

#  line start end v2   v3
#1    1    75 100  D    a
#2    1    75 100  D    b
#3    2   100 150  D    b
#4    2   100 150  E    b
#5    2   100 150  F    b
#6    3   170 190  I    b
#7    4   240 300  J <NA>
#8    4   240 300  K <NA>
#9    4   240 300  F <NA>
库(fuzzyjoin)
图书馆(dplyr)
连接两个数据帧%
选择(-c(开始.y,结束.y))%>%
重命名(开始=开始.x,结束=结束.x)
}

list_df Related:在上面的示例中,您实际上并没有使用IRanges。因此,如果它真的像你的例子中那样加入,那么下面使用“Reduce”的答案应该有效。相关:在上面的例子中,你实际上没有使用IRanges。因此,如果它真的像您的示例中那样加入,下面使用“Reduce”的答案应该会起作用。超级酷。
Reduce
到底做了什么?
Reduce
将首先将df1与df2连接起来,df2的输出与df3连接起来,依此类推,用于
list_df
中存在的所有数据帧列表,超级酷。
Reduce
具体做什么?
Reduce
将首先将df1与df2连接起来,df2的输出与df3连接起来,依此类推,用于
list\u df
中存在的所有数据帧列表,
library(fuzzyjoin)
library(dplyr)

join_two_dataframes <- function(df1, df2) {
  interval_left_join(x = df1,
                     y = df2,
                     by = c("start", "end")) %>%
    select(-c(start.y, end.y)) %>%
    rename(start = start.x, end = end.x)
}

list_df <- list(df1, df2, df3)
Reduce(join_two_dataframes, list_df)

#  line start end v2   v3
#1    1    75 100  D    a
#2    1    75 100  D    b
#3    2   100 150  D    b
#4    2   100 150  E    b
#5    2   100 150  F    b
#6    3   170 190  I    b
#7    4   240 300  J <NA>
#8    4   240 300  K <NA>
#9    4   240 300  F <NA>