我有2个数据框。一个有ID列表和700个人的日期,另一个有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)
但是继续给我一个错误,其中有一个长度与最后一部分df2$date < df1$date
不匹配的东西,当我拿一个sampletest(寻找1个ID的操作码)时,我可以看到我错过了很多从df1开始的日期之前的行。任何想法或解决方案?
我只有base-R作为其医院计算机,不允许任何下载-.-
答案 0 :(得分:0)
在基地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
我不确定数据中xx
的日期会发生什么。他们是真的吗?如果它们出现在实际数据中,则需要进行特殊处理,否则它们将无法转换为正确的日期格式,因此计算失败。