通过r中其他列的上下文顺序标记数据帧的行块

时间:2019-05-07 14:40:28

标签: r data-manipulation

我有一个仪器,它按设定的时间间隔进行读数,并希望在活动状态下依次识别每个事件,这可以通过基线测量中的偏差来看出。

我可以确定它何时与ifelse()语句一起使用,但是我希望每组行都根据事件发生的顺序(即事件1,事件2等)指定ID。

以下是r(首选语言)中情况的简化示例:

original_df <- tribble(

  ~rownum, ~context_val,
  #-------|-------------
  1, 0.2,
  2, 0.3,
  3, 0.2,
  4,  20,
  5,  28,
  6,  22,
  7, 0.4,
  8, 0.2,
  9,  21,
  10, 18,
  11,0.1
)

desired_outcome <- tribble(

  ~rownum, ~context_val, ~sequentail_tag,
  #-------|-------------|----------------
  1, 0.2, NA,
  2, 0.3, NA,
  3, 0.2, NA,
  4,  20,  1,
  5,  28,  1,
  6,  22,  1,
  7, 0.4, NA,
  8, 0.2, NA,
  9,  21,  2,
  10, 18,  2,
  11,0.1, NA


)

context_val字段将确定仪器的使用时间,顺序标签将标识行所属的事件。

1 个答案:

答案 0 :(得分:1)

有点费解,但是它起作用了……您可以看到基本的逻辑……

original_df %>% 
mutate(
  runs1 = ifelse(context_val > 15 & lag(context_val < 15), 1, 0), 
  runs2 = cumsum(runs1), 
  sequential_tag = ifelse(context_val > 15, runs2, NA) 
)

# A tibble: 11 x 5
       rownum context_val runs1 runs2 sequential_tag
        <dbl>       <dbl> <dbl> <dbl>          <dbl>
     1      1         0.2     0     0             NA
     2      2         0.3     0     0             NA
     3      3         0.2     0     0             NA
     4      4        20       1     1              1
     5      5        28       0     1              1
     6      6        22       0     1              1
     7      7         0.4     0     1             NA
     8      8         0.2     0     1             NA
     9      9        21       1     2              2
    10     10        18       0     2              2
    11     11         0.1     0     2             NA

>