我有一个包含多个数字的数组,我事先并不知道这些数字是什么。我想将数组中与前一个数字不连续的数字分开(除了序列中的第一个数字)。
例如:
数组:2 3 4 5 10 11 12 15 18 19 20 23 24
我想返回2 10 15 18 23
原始数组可以是可变长度,包括长度为零
谢谢
答案 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: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
答案 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