很抱歉,如果这个问题含糊不清,我搜查了一下,无法找到一个anser。我有一些看起来像这样的数据:
x = c(1,2,3,4,5,6,7,8,9,10)
y = c(T,T,T,F,F,T,T,F,F,T)
我想加入" TRUE"指向我可用于绘图的连续向量列表。即,像这样的列表(带有一些额外的填充):
$`1`
[1] 0.5 3.5
$`2`
[1] 5.5 7.5
$`3`
[1] 9.5 10.5
我知道我可以在for循环中执行此操作,但我有很多数据点,我想知道是否有一些智能矢量操作我可以做。
答案 0 :(得分:2)
尝试使用rle
:
ry <- rle(y)
out <- split(x[y], rep(seq_along(ry$values), ry$lengths)[y])
#$`1`
#[1] 1 2 3
#
#$`3`
#[1] 6 7
#
#$`5`
#[1] 10
lapply(out, function(x) range(x) + c(-0.5,0.5))
#$`1`
#[1] 0.5 3.5
#
#$`3`
#[1] 5.5 7.5
#
#$`5`
#[1] 9.5 10.5