确定 R 中连续数字的序列
Determine sequence of consecutive numbers in R
类似于Finding groups of contiguous numbers in a list and Find consecutive values in vector in R,不同之处在于我有一个最多为4的数字序列,即
y=c(4*1:4,24,31,33,39,4*16:20)
> y
[1] 4 8 12 16 24 31 33 39 64 68 72 76 80
我想要一个函数来 return 每个值序列,最多由 4 分隔,所以我得到:
4 8 12 16 # all sep by at most 4
31 33 # all sep by at most 4
64 68 72 76 80 # all sep by at most 4
我试过了:
st=c(1,which(diff(y)<5)+1)
en=c(st-1,length(y))
y[st]
[1] 4 8 12 16 33 68 72 76 80
y[en]
[1] 4 8 12 31 64 68 72 76 80
无济于事。
我确定我遗漏了一些明显的东西,如果有任何提示,我将不胜感激。
这就是你想要的吗?
split(y, cumsum(c(0, diff(y) > 4)));
#$`0`
#[1] 4 8 12 16
#
#$`1`
#[1] 24
#
#$`2`
#[1] 31 33
#
#$`3`
#[1] 39
#
#$`4`
#[1] 64 68 72 76 80
我在你的 list
中没有看到 24
;这是一个错误吗?
如果您想排除 list
个只有一个数字的条目,您可以在一行中完成所有操作:
Filter(length, lapply(split(y, cumsum(c(0, diff(y) > 4))), function(x) x[length(x) > 1]));
#$`0`
#[1] 4 8 12 16
#
#$`2`
#[1] 31 33
#
#$`4`
#[1] 64 68 72 76 80
请求的结果暗示您想要丢弃被隔离的值:
> seqs <- split(y, cumsum( c(0, diff(y)>4) ) ); seqs[ sapply( seqs, length) > 1 ]
$`0`
[1] 4 8 12 16
$`2`
[1] 31 33
$`4`
[1] 64 68 72 76 80
类似于Finding groups of contiguous numbers in a list and Find consecutive values in vector in R,不同之处在于我有一个最多为4的数字序列,即
y=c(4*1:4,24,31,33,39,4*16:20)
> y
[1] 4 8 12 16 24 31 33 39 64 68 72 76 80
我想要一个函数来 return 每个值序列,最多由 4 分隔,所以我得到:
4 8 12 16 # all sep by at most 4
31 33 # all sep by at most 4
64 68 72 76 80 # all sep by at most 4
我试过了:
st=c(1,which(diff(y)<5)+1)
en=c(st-1,length(y))
y[st]
[1] 4 8 12 16 33 68 72 76 80
y[en]
[1] 4 8 12 31 64 68 72 76 80
无济于事。
我确定我遗漏了一些明显的东西,如果有任何提示,我将不胜感激。
这就是你想要的吗?
split(y, cumsum(c(0, diff(y) > 4)));
#$`0`
#[1] 4 8 12 16
#
#$`1`
#[1] 24
#
#$`2`
#[1] 31 33
#
#$`3`
#[1] 39
#
#$`4`
#[1] 64 68 72 76 80
我在你的 list
中没有看到 24
;这是一个错误吗?
如果您想排除 list
个只有一个数字的条目,您可以在一行中完成所有操作:
Filter(length, lapply(split(y, cumsum(c(0, diff(y) > 4))), function(x) x[length(x) > 1]));
#$`0`
#[1] 4 8 12 16
#
#$`2`
#[1] 31 33
#
#$`4`
#[1] 64 68 72 76 80
请求的结果暗示您想要丢弃被隔离的值:
> seqs <- split(y, cumsum( c(0, diff(y)>4) ) ); seqs[ sapply( seqs, length) > 1 ]
$`0`
[1] 4 8 12 16
$`2`
[1] 31 33
$`4`
[1] 64 68 72 76 80