我有一个非常大的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。因此,在上面的示例中,第一行在最后一个序列中有三个连续的零,但第二行没有。
如果我只有一个向量(不是 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))))