R:如何标记 data.table 中特定时间范围内的观察结果?

R: How to flag observations within a certain timeframe in data.table?

我正在使用类似于下图的大型数据框。我想通过 ID 标记所有在 30 天前有观察结果的观察结果。我最初一直在尝试通过 fuzzyjoin 来实现这一点,但似乎无法确定 {data.table} 哪里出错了。有什么建议吗?

library(tidyverse)
library(magrittr)
library(data.table)
df<-tibble(
  date=sample(seq(as.Date('1999/01/01'), as.Date('1999/06/01'), by="day"), 300,replace=T),
  id=sample(seq(1:3),300,replace=T),claim_id=1:300)

df%<>%data.table()
df_index<-df
df_readmit<-df
names(df_index)[c(1,3)]<-c("index_date","index_id")
names(df_readmit)[c(1,3)]<-c("readmit_date","readmit_id")

df_readmit[df_index,.(id,index_date,readmit_date,index_id,readmit_id),
           on=.(id,readmit_date>index_date),nomatch=0]

如果可以更改顺序,那么我建议我们只看日期的diff

library(data.table)
setorder(df, date)
df[,.SD[c(TRUE, diff(date) > 30),], by = id]
#       id       date claim_id
#    <int>     <Date>    <int>
# 1:     1 1999-01-01      231
# 2:     2 1999-01-02      284
# 3:     3 1999-01-03       78

在这种情况下,由于跨越 6 个月的 100 天几乎不可能有 30 天的跨度未被触及,因此 none 的样本数据出现了这种情况。但是,也许该方法适用于您的真实数据。