У меня есть вектор, содержащий список чисел. Как найти числа, отсутствующие в векторе?
Например:
sequence <- c(12:17,1:4,6:10,19)
Отсутствуют числа 5, 11 и 18.
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 >
Вы можете использовать функцию setdiff() для вычисления разностей установок. Требуется разница между полной последовательностью (от min(sequence) до max(sequence)) и sequence с пропущенными значениями.
setdiff()
min(sequence)
max(sequence)
sequence
setdiff(min(sequence):max(sequence), sequence)
c(1:max(sequence))[!duplicated(c(sequence,1:max(sequence)))[-(1:length(sequence))]] [1] 5 11 18
Признаюсь, это не очень изящное решение, но оно определяет, какие в векторе 1: max (sequence) являются дубликатами последовательности, а затем выбирает их из того же вектора.
Этот ответ просто получает все числа от самого низкого до самого высокого в последовательности, а затем спрашивает, чего нет в исходной последовательности.
which(!(seq(min(sequence), max(sequence)) %in% sequence)) [1] 5 11 18