此问题与Consecutive value after column value change in R
非常相似所以
SOG <- c(4,4,0,0,0,3,4,5,0,0,1,2,0,0,0)
不同之处在于,现在我想计算出有多少组SOG。例如:
SOG Trips
--- -----
4 1
4 1
0 0
0 0
0 0
3 2
4 2
5 2
0 0
0 0
1 3
2 3
0 0
0 0
0 0
任何?
答案 0 :(得分:5)
假设您的意思是“SOG组”是一组连续的非零SOG值,即以非零SOG值开始并以非零SOG值结束(不一定是相同值):< / p>
Trips <- ifelse(SOG>0, cumsum(c(SOG[1]>0, diff(SOG>0)) == 1), 0)
# [1] 1 1 0 0 0 2 2 2 0 0 3 3 0 0 0
答案 1 :(得分:1)
这是一个选择:
replace(cumsum(c(SOG[1], abs(diff(SOG))) == SOG & SOG != 0), SOG == 0, 0)
# [1] 1 1 0 0 0 2 2 2 0 0 3 3 0 0 0
答案 2 :(得分:1)
您可以从TrueSeq
尝试我的my GitHub-only "SOfun" package功能。
用法是:
library(SOfun)
TrueSeq(as.logical(SOG))
# [1] 1 1 0 0 0 2 2 2 0 0 3 3 0 0 0
要获得反转,只需否定as.logical
步骤:
TrueSeq(!as.logical(SOG))
# [1] 0 0 1 1 1 0 0 0 2 2 0 0 3 3 3