У меня есть таблица данных, которая определяет начальную и конечную координаты для набора последовательностей. Например:
df1 <- data.frame(from = c(7, 22, 35, 21, 50),
to = c(13, 29, 43, 31, 60))
Учитывая начальные и конечные координаты (то есть 1 и 100), я пытаюсь идентифицировать все целые числа, не охватываемые последовательностями, с одинаковым форматом вывода. Например:
df2 <- data.frame(from = c(1, 14, 32, 44, 61),
to = c(6, 20, 34, 49, 100))
Вот моя текущая попытка, в которой я векторизирую последовательности в df1, а затем идентифицирую все целые числа, которые не соответствуют последовательности 1: 100.
seq2 <- Vectorize(seq.default, vectorize.args = c("from", "to"))
seq <- c(1:100)
df1_int <- unlist(seq2(from = df1$from, to = df1$to))
df1_int <- unique(df1_int)
df2_int <- seq[!seq %in% df1_int]
all(diff(df2_int) == 1)
Однако этот метод слишком медленный для набора данных, к которому я хочу применить его (~ 100 000 000 целых чисел), и я не знаю, как переформатировать вектор df2_int в кадр данных в формате df2.
Любая помощь будет принята с благодарностью!
Примечание: последовательности в df1 не всегда начинаются с самого низкого целого числа (например, последовательность может выполняться от 13 до 7, а не от 7 до 13). Также могут быть последовательности только с одним целым числом (например, от 7 до 7).