首页 > 解决方案 > 如何通过另一个数据帧中的两个条件对数据帧进行子集化

问题描述

我有两个数据框。

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 的第二和第三行,因为它们的 Date 在第二个数据框中不早于 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

标签: rdplyrdata.table

解决方案


您可以dplyr通过将第二个数据框连接到第一个数据框并使用过滤器来使用包来执行此操作。如果列具有相同的名称,dplyr将在列名称上添加 .x 和 .y,因此您的代码看起来像这样。

 df1 %>% inner_join(df2, by = 'ID') %>% filter(Date.x >= Date.y)

推荐阅读