假设我有一个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,有更好的方法吗?
答案 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