R中的连续组号

时间:2015-05-28 13:49:49

标签: r

此问题与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

任何?

3 个答案:

答案 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