次のようなベクトルがあります。
xx <- c(1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1)
インデックスを持つインデックスを見つけて、それらを組み合わせたいと思います。この場合、出力を 1 6 と 11 14 のように 2x2 マトリックスにしたいと思います。私のベクトルは実際には非常に長いので、これを手動で行うことはできません。誰でもこれで私を助けることができますか?ありがとう。
次のようなベクトルがあります。
xx <- c(1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1)
インデックスを持つインデックスを見つけて、それらを組み合わせたいと思います。この場合、出力を 1 6 と 11 14 のように 2x2 マトリックスにしたいと思います。私のベクトルは実際には非常に長いので、これを手動で行うことはできません。誰でもこれで私を助けることができますか?ありがとう。
これは、他の人のアイデアに基づいて構築された別のソリューションであり、少し短くて高速です。
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