R: Как найти непоследовательные элементы в массиве

У меня есть массив с несколькими числами в нем, и я не знаю заранее, какие числа будут. Я хотел бы выделить те числа в массиве, которые не последовательны к предыдущему номеру (в дополнение к первому числу в последовательности).

Например: массив: 2 3 4 5 10 11 12 15 18 19 20 23 24

Я хотел бы вернуться 2 10 15 18 23

Исходный массив может иметь переменную длину, включая нулевую длину

Спасибо

3 ответа

Решение

Пытаться

 v1 <- c(2:5,10:12,15, 18:20, 23:24)
 v1[c(TRUE,diff(v1)!=1)]
#[1]  2 10 15 18 23

Обновить

Если вы хотите получить последний последовательный номер, попробуйте

v1[c(diff(v1)!=1, TRUE)]
#[1]  5 12 15 20 24

Как ни странно:-), я могу предложить одно из своих творений: cgwtools:seqle, seqle работает так же, как rle но возвращает последовательность, а не повторы.

 foo<- c(2,3,4,5,10,11,12,15,18,19,20,23,24)
 seqle(foo)
Run Length Encoding
  lengths: int [1:5] 4 3 1 3 2
  values : num [1:5] 2 10 15 18 23

Вы можете использовать функцию lag из пакета dplyr:

arr <- c(2, 3, 4, 5, 10, 11, 12, 15, 18, 19, 20, 23, 24)

index_not_sequential <- which(arr - dplyr::lag(arr, 1, default=-1 ) != 1)

arr[index_not_sequential]

дает

[1]  2 10 15 18 23
Другие вопросы по тегам