选择 r 中某个标志值之后的行

Selecting rows following a certain flag value in r

我有一个由两列 'group' 和 'value' 组成的数据框。我想 select 每个组中值“4”之后最多三行。如果在下一组开始之前少于 3 行,则 select 仅 0/1/2 行。

理想情况下,我会得到某种 1/0 或 True/Falses 值的向量,以指示我是否 select 编辑了该行。

有什么想法吗?

  mydf= structure(list(group = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("a", 
 "b"), class = "factor"), value = c(6, 5, 4, 6, 1, 4, 1, 4, 6, 
 6, 7, 3, 7, 4, 7, 5, 7, 3, 2, 4)), .Names = c("group", "value"
 ), row.names = c(NA, -20L), class = c("data.table", "data.frame"
  ), .internal.selfref = <pointer: 0x102805578>);
 mydf

最好也显示预期的结果。可能有帮助。

 library(data.table)
 mydf[, indx:= cumsum(value==4) , group][, flag:= if (indx!=0) 1:.N %in% 
              2:4 else FALSE, list(group, indx)][, indx:=NULL][]
 #   group value  flag
 #1:     a     6 FALSE
 #2:     a     5 FALSE
 #3:     a     4 FALSE
 #4:     a     6  TRUE
 #5:     a     1  TRUE
 #6:     a     4 FALSE
 #7:     a     1  TRUE
 #8:     a     4 FALSE
 #9:     a     6  TRUE
#10:     a     6  TRUE
#11:     b     7 FALSE
#12:     b     3 FALSE
#13:     b     7 FALSE
#14:     b     4 FALSE
#15:     b     7  TRUE
#16:     b     5  TRUE
#17:     b     7  TRUE
#18:     b     3 FALSE
#19:     b     2 FALSE
#20:     b     4 FALSE