[英]how to subset a data frame by two conditions in another data frame
我有两个数据框。
ID Date
1 1999-01-01
1 2000-01-01
1 2001-01-01
2 1999-01-01
2 2000-01-01
3 1998-01-01
3 1999-01-01
4 2000-01-01
和
ID Date
1 1999-03-01
2 2000-01-01
3 1998-01-01
我的目标是在第二个数据帧中按ID子集第一个数据帧。 然后,在ID的每个子组中,我只选择不早于第二个数据框中的日期的日期。 例如,我仅选择ID 1的第二行和第三行,因为它们的日期不早于第二个数据帧中的1999-03-01。 我想要的结果是
ID Date
1 2000-01-01
1 2001-01-01
2 2000-01-01
3 1998-01-01
3 1999-01-01
您可以使用dplyr
软件包来实现此目的,方法是将第二个数据帧连接到第一个数据帧并使用过滤器。 如果列名相同,则dplyr
将在列名上添加.x和.y,因此您的代码应如下所示。
df1 %>% inner_join(df2, by = 'ID') %>% filter(Date.x >= Date.y)
如果您的数据帧是数据表,则可以使用下面的代码在匹配ID
s和Date
df1
> = Date
df2
上连接两个表,这将直接返回结果,而无需执行额外的过滤步骤。
library(data.table)
df1[df2, on = .(ID, Date >= Date), .(ID, Date = x.Date)]
# ID Date
# 1: 1 2000-01-01
# 2: 1 2001-01-01
# 3: 2 2000-01-01
# 4: 3 1998-01-01
# 5: 3 1999-01-01
使用数据
df1 <- fread('
ID Date
1 1999-01-01
1 2000-01-01
1 2001-01-01
2 1999-01-01
2 2000-01-01
3 1998-01-01
3 1999-01-01
4 2000-01-01
')
df1[, Date := as.Date(Date)]
df2 <- fread('
ID Date
1 1999-03-01
2 2000-01-01
3 1998-01-01
')
df2[, Date := as.Date(Date)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.