R:如何在数组中查找非顺序元素

时间:2014-10-28 08:36:43

标签: arrays r sequential

我有一个包含多个数字的数组,我事先并不知道这些数字是什么。我想将数组中与前一个数字不连续的数字分开(除了序列中的第一个数字)。

例如: 数组:2 3 4 5 10 11 12 15 18 19 20 23 24

我想返回2 10 15 18 23

原始数组可以是可变长度,包括长度为零

谢谢

3 个答案:

答案 0 :(得分:10)

尝试

 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

答案 1 :(得分:4)

奇怪的是:-),我得到了我的一个创作:cgwtools:seqleseqle就像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

答案 2 :(得分:2)

您可以使用包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