【问题标题】:get length of sequences获取序列的长度
【发布时间】:2018-12-17 22:23:26
【问题描述】:

我有一列数据(45,000 行!),它表示过滤器何时运行或关闭(取决于条件,显示为零)。日志文件记录如下(实际上2列第一列是自开始以来的计数)

col 1: 1,2,3,4,5,6,7,8,9,10.....45,000)
col 2: 1,2,3,4,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,0,0,0,0,0,0,0,0,1,2,3,0,0,0,0,0 etc.

我想要的是包含上述数据的 2 列(“时间”和“时间”):

"time on" 4,0,12,0,3

(即非零序列的长度)和相应的

"time off" 0,4,0,8,5 

(按顺序排列的零的长度)。

最终我想制作一个条形图,显示一段时间内的休息日和休息日

【问题讨论】:

    标签: r sequence run-length-encoding


    【解决方案1】:

    您可以使用rle(“运行长度编码”)实现此目的:

    x = c(1,2,3,4,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,0,0,
          0,0,0,0,0,0,1,2,3,0,0,0,0,0)
    runs = rle(x != 0)
    nonzero = runs$lengths
    nonzero[! runs$values] = 0
    nonzero
    # Output:
    # [1]  4  0 12  0  3  0
    zeros = runs$lengths
    zeros[runs$values] = 0
    zeros
    # Output:
    # [1] 0 4 0 8 0 5
    

    【讨论】:

    • 这对我有用,用的不多,很好的学习。那么如何在同一张图上同时绘制“零”和“非零”?我正在考虑 ggplot2 中的叠加条形图,但正在尝试更多相当于水平龙卷风图但不知道如何处理它。
    • @ramonskovitch:最好单独问一个关于生成情节的问题。
    猜你喜欢
    • 2022-11-14
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    • 2012-10-15
    • 2015-11-20
    • 1970-01-01
    • 2021-06-18
    • 2023-04-06
    相关资源
    最近更新 更多