向量从0变为非零的次数

时间:2018-12-04 18:44:16

标签: r

假设我有一个hours <- c( 200,200,0,0,0,100,100,100,0,100)这样的向量,我想计算它从0到非零的次数。

例如,我们可以做

starts<-0
for(i in 1:(length(hours)-1)) {
  if(hours[i]==0 & hours[i+1]!=0) starts<-starts+1
}

感觉不太像R,有更好的方法吗?

4 个答案:

答案 0 :(得分:4)

您可以使用diff

sum(diff(hours != 0) == 1) 
# [1] 2

说明:

“非零度”(sum)中存在差异(diff)(!= 0)的次数(== 1)。

答案 1 :(得分:2)

您可以使用rle

hours <- c( 200,200,0,0,0,100,100,100,0,100)
runs <- rle(hours)
sum(runs$values == 0) - ifelse(tail(hours,1) == 0,1,0)
#evaluates to 2

逻辑是,从0开始的过渡次数是0的非终端运行次数。

答案 2 :(得分:1)

library(tidyverse)
sum(hours == 0 & lead(hours) != 0)

答案 3 :(得分:0)

类似于Jordo的答案,但没有使用额外的库。

Objects::requireNonNullElseGet