Вычитание диапазонов между 2 таблицами в R - PullRequest
2 голосов
/ 07 мая 2020

Если у меня есть:

df1:

  start end
     1   4
     5   7
     8  12
    20  22 

и

df2:

  start end
     3   6
    10  15

Как мне получить таблицу, содержащую интервалы df1, которых нет в df2 в R?

Например, первая строка df1 - это (1..4), и поскольку она перекрывается с интервалом (3..6) в df2, я хочу (1..4) - (3..6), что составляет (1..2) (т.е. интервал в первой строке df1, который нет в df2).

В итоге хочу такой результат:

  start end
     1   2
     7   7
     8   9
    20  22

1 Ответ

3 голосов
/ 07 мая 2020

Мы можем создать последовательность между df2 start и end и сохранить ее в vals. Затем для каждой строки в df1 мы можем включить range только тех значений, которых нет в vals.

vals <- unlist(Map(seq, df2$start, df2$end))
t(apply(df1, 1, function(x) range(setdiff(x[1]:x[2], vals))))

#     [,1] [,2]
#[1,]    1    2
#[2,]    7    7
#[3,]    8    9
#[4,]   20   22
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...