【问题标题】:Join 2 data frame based on range values in R根据 R 中的范围值加入 2 个数据框
【发布时间】:2019-04-02 10:11:23
【问题描述】:

假设我有 2 个数据框,列的开头和结尾没有重复,按每个范围排序。例如:

df1:

start end
10    20
21    35
37    50

df2:

start end
12    15
17    19
22    24
26    29
31    40
43    46

我想根据df2范围的连接操作得到一个新的数据框,该范围在df1范围内,如下所示:

range.df1 range.df2    
10:20     12:15
10:20     17:19
21:35     22:24
21:35     26:29
21:35     31:35
37:50     37:40
37:50     43:46

谁能告诉我如何在 R 中实现这一点?

【问题讨论】:

  • 您希望最终输出为字符串列? 10:2012:15?

标签: r dataframe


【解决方案1】:

这是foverlaps的选项

library(data.table)
setDT(df1, key = names(df1))
setDT(df2, key = names(df2))
foverlaps(df1, df2)[, .(range.df1 = paste(i.start, i.end, sep=":"), 
          range.df2 = paste(start, end, sep=":"))]
#    range.df1 range.df2
#1:     10:20     12:15
#2:     10:20     17:19
#3:     21:35     22:24
#4:     21:35     26:29
#5:     21:35     31:40
#6:     37:50     31:40
#7:     37:50     43:46

数据

df1 <- structure(list(start = c(10L, 21L, 37L), end = c(20L, 35L, 50L
 )), class = "data.frame", row.names = c(NA, -3L))

df2 <- structure(list(start = c(12L, 17L, 22L, 26L, 31L, 43L), end = c(15L, 
19L, 24L, 29L, 40L, 46L)), class = "data.frame", row.names = c(NA, 
-6L))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-18
    • 2014-09-02
    • 1970-01-01
    • 2014-08-21
    • 2022-10-06
    • 1970-01-01
    • 2017-10-14
    • 1970-01-01
    相关资源
    最近更新 更多