相关疑难解决方法(0)

将(1:n)[boolean]分割成连续的序列

我想将我的数据分成连续行的组,通过一些测试.这是一个例子:

set.seed(1)
n   <-  29
ok  <-  sample(c(TRUE,FALSE),n,replace=TRUE,prob=c(.7,.3))

vec <- (1:n)[ok]
# [1]  1  2  3  5  8  9 10 11 12 13 14 16 19 22 23 24 25 26 27 28
Run Code Online (Sandbox Code Playgroud)

所需的输出是"vec"分组为连续序列:

out <- list(1:3,5,8:14,16,19,22:28)
Run Code Online (Sandbox Code Playgroud)

这有效:

nv  <- length(vec)

splits <- 1 + which(diff(vec) != 1)
splits <- c(1,splits,nv+1)
nsp    <- length(splits)

out <- list()
for (i in 1:(nsp-1)){
    out[[i]] <- vec[splits[i]:(splits[i+1]-1)]
}
Run Code Online (Sandbox Code Playgroud)

我猜测基地R有一个更清洁的方式...?我还不熟悉我在SO上看过的那些rlecumsum诡计......

r

5
推荐指数
1
解决办法
257
查看次数

在R中按顺序查找开始和停止索引

假设我有序列:

x = c( 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0)
Run Code Online (Sandbox Code Playgroud)

在R中是否有一种优雅的方式来返回每个序列1的开始和停止索引?

答案应该是一个2列数组,其中nRows = 1的序列数:

startIndx = [ 1, 5, 7 ]
stopIndex = [ 2, 5, 9 ]
Run Code Online (Sandbox Code Playgroud)

谢谢.

BSL

r sequence pattern-matching indices

2
推荐指数
2
解决办法
824
查看次数

标签 统计

r ×2

indices ×1

pattern-matching ×1

sequence ×1