使用data.table::rleid创建序列,并根据附加条件排除某些行

使用data.table::rleid创建序列,并根据附加条件排除某些行,r,dplyr,data.table,R,Dplyr,Data.table,我想创建一系列后续的相同值,如data.table::rleiddoes。但问题是,我希望从序列中排除一些行,而应该排除哪些行可以由另一列定义。我已经发现,data.table::rleid可以使用两次,但仍然不能产生理想的结果-请参见以下内容: my_example <- structure(list(event = c(234, 234, 224, 232, 232, 201, 201, 201, 201, 201, 201, 201, 244, 244, 201, 201, 201

我想创建一系列后续的相同值,如
data.table::rleid
does。但问题是,我希望从序列中排除一些行,而应该排除哪些行可以由另一列定义。我已经发现,
data.table::rleid
可以使用两次,但仍然不能产生理想的结果-请参见以下内容:

my_example <- structure(list(event = c(234, 234, 224, 232, 232, 201, 201, 201, 
201, 201, 201, 201, 244, 244, 201, 201, 201, 244, 244, 212, 201, 
201, 201, 249, 201, 201, 201, 201, 201, 201, 201, 249, 201, 201, 
244, 244, 201, 261, 245, 203, 204, 204, 201, 201, 201, 201, 201, 
201, 216, 201), subgroup = c(10L, 11L, 10L, 10L, 11L, 10L, 10L, 
10L, 10L, 10L, 10L, 11L, 11L, 10L, 10L, 10L, 10L, 10L, 11L, 11L, 
10L, 11L, 11L, 11L, 11L, 11L, 11L, 10L, 11L, 11L, 11L, 10L, 10L,  
10L, 10L, 11L, 11L, 10L, 11L, 10L, 10L, 11L, 10L, 10L, 10L, 10L, 
10L, 10L, 10L, 11L)), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -50L), .Names = c("event", "subgroup"))

my_example %>% 
  mutate(in_seq = ! event %in% c(224, 232, 234, 261), 
         seq = data.table::rleid(subgroup) * in_seq,
         seq2 = data.table::rleid(seq))

# A tibble: 50 x 5
    event subgroup in_seq   seq  seq2
    <dbl>    <int> <lgl>  <int> <int>
 1   234       10 F          0     1
 2   234       11 F          0     1
 3   224       10 F          0     1
 4   232       10 F          0     1
 5   232       11 F          0     1
 6   201       10 T          5     2
 7   201       10 T          5     2
 8   201       10 T          5     2
 9   201       10 T          5     2
10   201       10 T          5     2
# ... with 40 more rows
my_示例%
突变(在%c(224232 234 261)中的事件%),
seq=数据表::rleid(子组)*在,
seq2=数据表::rleid(seq))
#一个tibble:50x5
_seq 2中的事件子组
1234 10楼01
223411f1
3224 10 F 0 1
4 232 10 F 0 1
5 232 11 F 0 1
620101052
720101052
820101052
9 201 10 T 5 2
1020110T52
# ... 还有40行

如何从计算中排除某些行?(在上面的示例中,这意味着第1:5行和第38行在
seq2
中都有NA)

如果我们想将“s2”中的值更改为
NA

library(data.table)
my_example %>% 
  mutate(in_seq = ! event %in% c(224, 232, 234, 261), 
         s1 = rleid(subgroup * in_seq), 
         s2 = rleid(s1) * NA ^ !in_seq)
或者如果“s2”需要从“1”开始,则跳过“in seq”中的
FALSE

my_example %>% 
   mutate(in_seq = ! event %in% c(224, 232, 234, 261), 
      s1 = data.table::rleid(subgroup) * in_seq, 
      s2 = (NA^!s1) * s1,
      s2 = match(s2, unique(na.omit(s2))))

也可能是

setDT(my_example)[, in_seq := !event %in% c(224, 232, 234, 261)
      ][, s1 := rleid(subgroup) * in_seq
       ][s1 != 0, s2 := rleid(s1)]

你能显示出预期的输出吗?根据这个示例,“seq”从1开始不完全是这样,我仍然希望将这些行保留在data.frame中,只是从序列号中排除