私は非常に大きなdata.frame(実際にはdata.table)を持っています。さて、物事を簡単にするために、私の data.frame が次のようであると仮定しましょう:
x <- c(1, 1, 0, 0, 1, 0, 0, NA, NA, 0)
y <- c(1 ,0 ,NA, NA, 0, 0, 0, 1, 1, 0)
mydf <- data.frame(rbind(x,y))
NAを考慮せずに、最後のシーケンスが3つの連続したゼロで形成されている行(ある場合)を特定したいと思います。したがって、上記の例では、最初の行の最後のシーケンスに 3 つの連続するゼロがありますが、2 番目の行にはありません。
ベクトル(data.frameではない)がある場合にのみ、その方法を知っています:
runs <- rle(x[is.na(x)==F])
runs$lengths[length(runs$lengths)] > 2 & runs$values[length(runs$lengths)]==0
私は明らかにループを行うことができ、私が望むものを手に入れることができます。しかし、それは信じられないほど非効率的で、実際の data.frame はかなり大きいです。それで、最速の方法で行う方法についてのアイデアはありますか?
apply は便利だと思いますが、今のところ使用することは考えられません。また、おそらくこれを行う data.table 方法がありますか?
ps .: 実は、この data.frame は、元の data.table の形状を変更したものです。元の形式の data.frame でどうにかして仕事をすることができれば、それは問題ありません。私のdata.frameが元々どのようになっているかを確認するには、次のように考えてください。
x <- c(1, 1, 0, 0, 1, 0, 0, 0)
y <- c(1 ,0 , 0, 0, 0, 1, 1, 0)
myOriginalDf <- data.frame(value=c(x,y), id=rep(c('x','y'), c(length(x), length(y))))