根据ID和日期提取行。R基
我有两个数据帧。一个包含700人的ID和日期列表,另一个包含400.000行的日期和多个其他变量,用于超过1000人。 示例df1:根据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
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,对不起,我用了&
。我写问题的时候打错了