我试图找到超过1M obs的数据帧连续运行'1'值的次数。 11个二进制变量。我在这里看了很多类似的问题,但没有一个像我一样处理冗长的数据帧。
我可以逐行找到'1'的连续运行,但我正在寻找能够更优雅地处理整个数据帧的解决方案。
简单的示例数据:
test <- data.frame(v1=c(1,0,1),v2=c(1,1,1),v3=c(0,1,1),v4=c(1,1,0),v5=c(1,1,1))
test
vtest <- as.vector(test[1,])
vtest
r <- rle(vtest)
r$length[r$values ==1]
row1_max <- lapply(r$length[r$values ==1], FUN=max)
row1_max
对于我来说,找到数据帧每行最多连续运行'1'的最佳方法是什么,而不必逐行找到每一行?
我的真实数据集还包含一个ID#变量,它唯一地标识每条记录,我最终想知道ID#的最大连续运行次数,所以任何额外的帮助都会非常感激。
提前致谢!
答案 0 :(得分:4)
您可以使用apply
将函数应用于数据框的每一行:
apply(test, 1, function(x) {
r <- rle(x)
max(r$lengths[as.logical(r$values)])
})
这将返回每行连续1
的最大连续数:
[1] 2 4 3
答案 1 :(得分:0)
我会使用申请家庭的组合
library(dplyr)
apply(test, 1, rle) %>% lapply(function(x) x$lengths) %>% vapply(max, numeric(1))
[1] 2 4 3
答案 2 :(得分:0)
我假设您的df整洁,并且二进制文件在列中
set.seed(1)
event <- sample(1:3,365*3,replace=TRUE) # proxy for one of your columns
runs <- rle(event)
sum(runs$lengths >= 6 & runs$values == 1)
[1] 2
我目前正在寻找6个或更多个序列开始的行号