【问题标题】:Consecutive group number in RR中的连续组号
【发布时间】:2015-05-28 13:49:48
【问题描述】:

这个问题和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

有人吗?

【问题讨论】:

  • 什么是组?
  • r &lt;- rle(SOG !=0) ; r$values[r$values] &lt;- cumsum(r$values[r$values]) ; inverse.rle(r)

标签: r


【解决方案1】:

假设您的意思是“一组 SOG”是一组连续的非零 SOG 值,即以非零 SOG 值开始并以非零 SOG 值结束(不一定是相同的值):

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

【讨论】:

    【解决方案2】:

    这是一种选择:

    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
    

    【讨论】:

      【解决方案3】:

      您可以从my GitHub-only "SOfun" package 尝试我的TrueSeq 功能。

      用法如下:

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-08
        • 2021-12-09
        • 1970-01-01
        • 1970-01-01
        • 2015-01-29
        • 1970-01-01
        • 2022-11-15
        • 2020-01-02
        相关资源
        最近更新 更多