Как найти пропущенные числа в последовательности? - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть вектор, содержащий список чисел. Как найти числа, отсутствующие в векторе?

Например:

sequence <- c(12:17,1:4,6:10,19)

Отсутствуют числа 5, 11 и 18.

Ответы [ 4 ]

2 голосов
/ 26 апреля 2020
sequence <- c(12:17,1:4,6:10,19)

seq2 <- min(sequence):max(sequence)

seq2[!seq2 %in% sequence]

... и вывод:

> seq2[!seq2 %in% sequence]
[1]  5 11 18
> 
1 голос
/ 26 апреля 2020

Вы можете использовать функцию setdiff() для вычисления разностей установок. Требуется разница между полной последовательностью (от min(sequence) до max(sequence)) и sequence с пропущенными значениями.

setdiff(min(sequence):max(sequence), sequence)
1 голос
/ 26 апреля 2020
c(1:max(sequence))[!duplicated(c(sequence,1:max(sequence)))[-(1:length(sequence))]]
[1]  5 11 18

Признаюсь, это не очень изящное решение, но оно определяет, какие в векторе 1: max (sequence) являются дубликатами последовательности, а затем выбирает их из того же вектора.

1 голос
/ 26 апреля 2020

Этот ответ просто получает все числа от самого низкого до самого высокого в последовательности, а затем спрашивает, чего нет в исходной последовательности.

which(!(seq(min(sequence), max(sequence)) %in% sequence))
[1]  5 11 18
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...