Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据R中的条件删除特定日期后的行_R_Date_Conditional Statements - Fatal编程技术网

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

根据R中的条件删除特定日期后的行,r,date,conditional-statements,R,Date,Conditional Statements,我看到过一些类似的问题,但没有一个应用于data.table或data.frame的特定行,而是应用于整个矩阵。 我有一个数据集,包括诊断为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/

我看到过一些类似的问题,但没有一个应用于data.table或data.frame的特定行,而是应用于整个矩阵。

我有一个数据集,包括诊断为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
因此,我希望我的最终数据是:

> 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
>dt
ID OA.date stop.date
1:  2  0        2009-12-31
2:  3  0        2008-12-31
3:  5  0        2011-12-31
4:  6  0        2011-12-31
5:  7  0        2011-12-31
6:  8  1 2010-06-05 2010-06-05
7:  9  1 2011-01-01 2011-01-01
8: 10  0        2011-12-31
我的目标是:

  dt[dt$OA==1] <- dt[!(oa.date < start)]  
dt[dt$OA==1]你可以试试

dt=dt[dt$OA==0|(dt$OA==1&!(dt$oa.date < start)),]
dt=dt[dt$OA==0 |(dt$OA==1&!(dt$OA.date
您可以试试

dt=dt[dt$OA==0|(dt$OA==1&!(dt$oa.date < start)),]
dt=dt[dt$OA==0 |(dt$OA==1&!(dt$OA.date
这应该很简单:

> 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
>dt[!(OA&OA.date

OA
列是二进制(1/0),在i表达式中强制为逻辑(真/假)。

这应该很简单:

> 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
>dt[!(OA&OA.date

OA
列是二进制(1/0),在i表达式中强制为逻辑(真/假)。

这很简单,我不知道为什么我没有想到。谢谢这很简单,我不知道为什么我没有想到。谢谢