根据 R 中的条件删除特定日期之后的行

Lb9*_*b93 0 r date conditional-statements

我见过类似的问题,但它们都没有将其应用于 data.table 或 data.frame 的特定行,而是将其应用于整个矩阵。
在 2 个日期之间对数据框进行子集
如何从 R 中的数据框中选择具有特定日期的一些行

我有一个数据集,其中包含被诊断为 OA 的患者和未诊断为 OA 的患者:

 dt <- data.table(ID = seq(1,10,1), OA = c(1,0,0,1,0,0,0,1,1,0), 
             oa.date = as.Date(c("01/01/2006", "01/01/2001", "01/01/2001", "02/03/2005","01/01/2001","01/01/2001","01/01/2001","05/06/2010", "01/01/2011", "01/01/2001"), "%d/%m/%Y"),
             stop.date = as.Date(c("01/01/2006", "31/12/2007", "31/12/2008", "02/03/2005", "31/12/2011", "31/12/2011", "31/12/2011", "05/06/2010", "01/01/2011", "31/12/2011"), "%d/%m/%Y"))
dt$oa.date[dt$OA==0] <- NA

> dt
    ID OA    oa.date  stop.date
 1:  1  1 2006-01-01 2006-01-01
 2:  2  0       <NA> 2007-12-31
 3:  3  0       <NA> 2008-12-31
 4:  4  1 2005-03-02 2005-03-02
 5:  5  0       <NA> 2011-12-31
 6:  6  0       <NA> 2011-12-31
 7:  7  0       <NA> 2011-12-31
 8:  8  1 2010-06-05 2010-06-05
 9:  9  1 2011-01-01 2011-01-01
10: 10  0       <NA> 2011-12-31
Run Code Online (Sandbox Code Playgroud)

我想做的是删除那些OA==1之前被诊断为 OA ( )的人start

start <- as.Date("01/01/2009", "%d/%m/%Y")
Run Code Online (Sandbox Code Playgroud)

所以我希望我的最终数据是:

> dt
     ID OA    oa.date  stop.date
 1:  2  0       <NA> 2009-12-31
 2:  3  0       <NA> 2008-12-31
 3:  5  0       <NA> 2011-12-31
 4:  6  0       <NA> 2011-12-31
 5:  7  0       <NA> 2011-12-31
 6:  8  1 2010-06-05 2010-06-05
 7:  9  1 2011-01-01 2011-01-01
 8: 10  0       <NA> 2011-12-31
Run Code Online (Sandbox Code Playgroud)

我的尝试是:

  dt[dt$OA==1] <- dt[!(oa.date < start)]  
Run Code Online (Sandbox Code Playgroud)

我也尝试过循环但没有效果。

任何帮助深表感谢。

tal*_*lat 5

这应该很简单:

> dt[!(OA & oa.date < start)]
#   ID OA    oa.date  stop.date
#1:  2  0       <NA> 2007-12-31
#2:  3  0       <NA> 2008-12-31
#3:  5  0       <NA> 2011-12-31
#4:  6  0       <NA> 2011-12-31
#5:  7  0       <NA> 2011-12-31
#6:  8  1 2010-06-05 2010-06-05
#7:  9  1 2011-01-01 2011-01-01
#8: 10  0       <NA> 2011-12-31
Run Code Online (Sandbox Code Playgroud)

OA列是二进制 (1/0),在 i 表达式中被强制转换为逻辑 (TRUE/FALSE)。