Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.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
根据ID和日期提取行。R基_R - Fatal编程技术网

根据ID和日期提取行。R基

根据ID和日期提取行。R基,r,R,我有两个数据帧。一个包含700人的ID和日期列表,另一个包含400.000行的日期和多个其他变量,用于超过1000人。 示例df1: ID date 1010 2014-05-31 1011 2015-08-27 1015 2011-04-15 ... 示例df2: ID Date Operationcode 1010 2008-01-03 456 1010 2016-06-09

我有两个数据帧。一个包含700人的ID和日期列表,另一个包含400.000行的日期和多个其他变量,用于超过1000人。 示例df1:

ID        date
1010      2014-05-31
1011      2015-08-27
1015      2011-04-15
...
示例df2:

ID         Date           Operationcode
1010       2008-01-03     456
1010       2016-06-09     1234
1010       1999-10-04     123186
1010       2017-02-30     71181
1010       2005-05-05     201
1011       2008-04-02     46
1011       2009-09-09     1231
1515       2017-xx-xx     156
1015       2013-xx-xx     123
1615       1998-xx-xx     123
1015       2005-xx-xx     4156
1015       2007-xx-xx     123
1015       2016-xx-xx     213
现在我想创建一个df3,其中我只保留来自df2的行,其中日期在df1之前(当由ID匹配时)

所以我得到:

    ID         Date           Operationcode
    1010       2008-01-03     456
    1010       1999-10-04     123186
    1010       2005-05-05     201
    1015       2005-xx-xx     4156
    1015       2007-xx-xx     123
我试过了

df3 <- subset(df1, ID %in% df2$ID & df2$date < df1$date)

df3在base R中,您可以执行以下操作

df3 <- merge(df2,df1,by="ID",all.x=TRUE) #merge in df1 date column
df3 <- df3[as.Date(df3$Date)<as.Date(df3$date),] #remove rows with invalid dates
#note that 'Date' is the df2 column, 'date' is the df1 version
df3 <- df3[!is.na(df3$ID),] #remove NA rows
df3$date <- NULL #remove df1 date column

df3
    ID       Date Operationcode
1 1010 2008-01-03           456
2 1010 1999-10-04        123186
3 1010 2005-05-05           201
6 1011 2009-09-09          1231
7 1011 2008-04-02            46

df3为什么
|
处于这种状态?我对您的问题的理解是,您需要在df1和df2之间的ID和日期条件上进行匹配。如果你改写
&df2$date
,会怎么样?@larsen,对不起,我用了
&
。我写问题的时候打错了