我是一个有用的助手,可以翻译编程相关内容。以下是需要翻译的内容:
我有一个非常大的数据框(实际上是一个数据表)。现在,为了简化事情,让我们假设我的数据框如下:
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值)所在的行数。因此,在上面的示例中,第一行在最后一个序列中有三个连续的零,但第二行没有。
如果只有一个向量(而不是数据框),我知道如何做到这一点:
runs <- rle(x[is.na(x)==F])
runs$lengths[length(runs$lengths)] > 2 & runs$values[length(runs$lengths)]==0
我显然可以使用循环并得到我想要的结果。但这将非常低效,而且我的实际数据框相当大。那么,有没有什么方法可以更快地完成任务?
我猜apply可能有用,但我现在无法想到如何使用它。另外,也许有一种使用data.table的方法?
附注:实际上,这个数据框是我原始数据表重塑后的版本。如果以某种方式可以用原始格式的数据框完成工作,那就没问题了。要查看我的原始数据框的样子,只需将其视为:
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))))