0

配列内の ID と最大連続 TRUE の長さを検索する方法 (for ループなし) を検索しています。例えば

foo <- as.numeric(runif(100) > 0.5)

シャッフルされた 0 と 1 が 100 個得られます。現在、この配列で 1 の連続する最長の行と対応する ID を検索しています。例えば

foo2 <- c(0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1)

につながるはずです

max.dur = 8
max.ids = c(6, 13)

table、cumsum、および which の組み合わせを試してみましたが、これを行う適切な方法が見つかりません。

4

2 に答える 2

2

これを行う1つの方法は次のとおりです。

foo2 <- c(0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1)

tmp <- rle(foo2) # calculates the lengths of runs of equal values
idx <- which.max(replace(tmp$length, !tmp$values, -1)) 
    # index of maximum number of consecutive 1s

max.dur <- tmp$lengths[idx]
# [1] 8
max.ids <- c(0, cumsum(tmp$lengths))[c(idx, idx + 1)] + c(1, 0)
# [1]  6 13
于 2013-10-28T09:53:41.717 に答える
1

使用できますrle

foo <- c(0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1)
XX <- rle(foo)
max.dur <- max(XX$lengths)
max.dur
## [1] 8

max.ids <- cumsum(XX$lengths)[XX$lengths == max.dur] - c(max.dur - 1, 0)
max.ids
## [1]  6 13
于 2013-10-28T09:55:48.107 に答える