使用 data.table 根据关键变量的条件查找索引

Find index based on condition by key variable using data.table

我有一个 data.table 这样的:

library(data.table)

dt1 <- data.table(
  id = 1,
  week = c( seq(1:260))
)
dt1[0:100, status := "A"][101:260, status := "B"]

dt2 <- data.table(
  id = 2,
  week = c( seq(1:260))
)
dt2[0:155, status := "A"][156:260, status := "B"]

dt3 <- data.table(
  id = 3,
  week = c( seq(1:260))
)
dt3[0:190, status := "A"][191:193, status := "B"][194:200, status := "A"][201:260, status := "B"]

data <- rbind(dt1,dt2,dt3)

我希望通过每个唯一 ID 找到第一个索引,其中状态连续 4 周等于“B”。结果应该是

data_want <- data.table(
  id = c(1,2,3),
  week = c(104, 59, 204)
)

有什么建议吗?

rleid:

data[order(id,week),.(status,week,n=seq_len(.N)),by=.(id,rleid(status))][
     status=="B"&n==4,.(id,week)]

      id  week
   <num> <int>
1:     1   104
2:     2   159
3:     3   204