我有一个只有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。
答案 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)