5
データをいくつかのテストに合格する連続した行のグループに分割したいとします。ここでは例です:(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
所望の出力は、 "VECは、" 連続した配列にグループ化されています
out <- list(1:3,5,8:14,16,19,22:28)
これは動作します:
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)]
}
私がベースでクリーンな方法があると推測していますR ...?私はまだ私がSOに見てきたrle
とcumsum
トリックと熟達していないよ...ここ
ありがとうございました。あなたの解を解いた後、私はこの形式が好きです: 'split(vec、cumsum(c(0、diff(vec)> 1))')。 – Frank