【问题标题】:Assigning values in a continuous sequence depending on second column根据第二列以连续序列分配值
【发布时间】:2019-02-12 10:46:57
【问题描述】:

我想为一列 TRUE 或 FALSE 值分配一个序列,该序列在一个或多个连续的 FALSE 值之后保持相同的 TRUE 值。

即我要复制的是这个;

df <- data.frame(
new_activity = as.character(c("TRUE","TRUE","TRUE","FALSE","TRUE","TRUE","TRUE","TRUE","TRUE","TRUE",
              "TRUE","TRUE","TRUE","TRUE","FALSE","FALSE","TRUE","TRUE","FALSE","TRUE")),
sequence = as.numeric(c(1,2,3,4,4,5,6,7,8,9,10,11,12,13,14,14,14,15,16,16)))

【问题讨论】:

    标签: r


    【解决方案1】:

    将您的列转换为logical,先使用cumsum,然后添加输入向量的否定以获得所需的输出

    x <- as.logical(df$new_activity)
    cumsum(x) + !x
    # [1]  1  2  3  4  4  5  6  7  8  9 10 11 12 13 14 14 14 15 16 16
    

    【讨论】:

      【解决方案2】:

      一种选择是将“new_activity”转换为logical,将其放在i,创建列“sequence1”作为行序列,然后用na.locf填充NAs

      library(zoo)
      library(data.table)
      setDT(df)[as.logical(new_activity), sequence1 := seq_len(.N)
             ][, sequence1 := na.locf(sequence1, fromLast = TRUE)]
      df
      #    new_activity sequence sequence1
      # 1:         TRUE        1         1
      # 2:         TRUE        2         2
      # 3:         TRUE        3         3
      # 4:        FALSE        4         4
      # 5:         TRUE        4         4
      # 6:         TRUE        5         5
      # 7:         TRUE        6         6
      # 8:         TRUE        7         7
      # 9:         TRUE        8         8
      #10:         TRUE        9         9
      #11:         TRUE       10        10
      #12:         TRUE       11        11
      #13:         TRUE       12        12
      #14:         TRUE       13        13
      #15:        FALSE       14        14
      #16:        FALSE       14        14
      #17:         TRUE       14        14
      #18:         TRUE       15        15
      #19:        FALSE       16        16
      #20:         TRUE       16        16
      

      【讨论】:

        猜你喜欢
        • 2020-01-12
        • 1970-01-01
        • 2022-12-31
        • 2013-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-02
        • 1970-01-01
        相关资源
        最近更新 更多