4

次のようなベクトルがあります。

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

インデックスを持つインデックスを見つけて、それらを組み合わせたいと思います。この場合、出力を 1 6 と 11 14 のように 2x2 マトリックスにしたいと思います。私のベクトルは実際には非常に長いので、これを手動で行うことはできません。誰でもこれで私を助けることができますか?ありがとう。

4

4 に答える 4

1

これは、他の人のアイデアに基づいて構築された別のソリューションであり、少し短くて高速です。

matrix(which(diff(c(0,xx,0)) != 0) - c(0,1), ncol = 2, byrow = T)
#     [,1] [,2]
#[1,]    1    6
#[2,]   11   14

非基本ソリューションはテストしませんでしたが、基本ソリューションの比較は次のとおりです。

xx = sample(c(0,1), 1e5, T)
microbenchmark(arun(xx), flodel(xx), flodel.fast(xx), eddi(xx))
#Unit: milliseconds
#            expr       min        lq    median        uq       max neval
#        arun(xx) 14.021134 14.181134 14.246415 14.332655 15.220496   100
#      flodel(xx) 12.885134 13.186254 13.248334 13.432974 14.367695   100
# flodel.fast(xx)  9.704010  9.952810 10.063691 10.211371 11.108171   100
#        eddi(xx)  7.029448  7.276008  7.328968  7.439528  8.361609   100
于 2013-06-15T05:07:35.973 に答える