R数据框 - 找到条纹的长度

时间:2014-05-07 14:35:53

标签: r dataframe

我有一个只有1行的R数据框,看起来像这样:

x1 x2 x3 x4 x5 x6 x7 x8 x9 x10
 1  1  1  1  0  1  0  1  0  0

我想知道从第一个位置开始连续有多少个1。所以这将是4。

更多例子:

(例1)

x1 x2 x3 x4 x5 x6 x7 x8 x9 x10
 0  1  1  1  0  1  0  1  0  0

将为0,因为第一个位置甚至不是1。

(例2)

x1 x2 x3 x4 x5 x6 x7 x8 x9 x10
 1  0  1  1  0  1  0  1  0  0

将是1。

我该如何实现?

numInStreakAtBeginning = function(row) {

}

此外,如何实现寻找最大条纹的方法,无论它从何处开始?例如,

x1 x2 x3 x4 x5 x6 x7 x8 x9 x10
 1  0  1  1  1  1  0  1  0  0

将是3。

1 个答案:

答案 0 :(得分:0)

返回长度为2的列表的函数,列表的第一个元素是1> s的起始条纹的长度,第二个元素是1&s; s的最长条纹的长度。

test <- as.data.frame(matrix(rbinom(20, 1, 0.5), nrow=1))

numInStreakAtBeginning <- function(row){
    runs <- rle(row[1,]) # convert to vector
    retList <- list() # store output

    if(!runs$values[1]){ # if the first value is 0, the length of the first streak is 0
        retList$firstStreak <- 0
    }else{
        retList$firstStreak <- runs$lengths[1] # if the first value is not 0, return length of first streak
    }

    retList$longestStreak <- max(runs$lengths[runs$values==1L]) # the longest streak of 1's, regardless of starting point

    return(retList)
}

numInStreakAtBeginning(test)