我有一个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的第一个索引,其中status等于";B";连续4周。结果应该是
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