我正在尝试使用 if else
做一个相当复杂的过滤器,但我总是在原地打转。
以下是数据示例:
individual_id born mom_id trap_date
13212 2013-03-16 11926 2014-06-26
13213 2013-03-16 11926 2013-07-23
13214 2013-03-16 11926 2015-06-01
13212 2013-03-16 11926 2014-06-26
11926 2010-04-08 10422 2013-01-23
11926 2010-04-08 10422 2013-02-01
11926 2010-04-08 10422 2013-03-08
11926 2010-04-08 10422 2013-03-12
11926 2010-04-08 10422 2013-04-23
11926 2010-04-08 10422 2013-05-01
11926 2010-04-08 10422 2013-08-23
11926 2010-04-08 10422 2013-09-01
11926 2010-04-08 10422 2013-10-23
11926 2010-04-08 10422 2013-12-01
我有一个名为 mom_id
的列,这些人也显示在 individual_id
列中。
我想删除 mom_id
的出生
日期后 35 天或 + 70 天发生的所有 trap_date
记录, 仅当她也出现在individual_id
列中。
因此,在此示例中,我想删除 2013 年 2 月 9 日 (2013-02-09
) 到 5 月之间的所有 trap_date
记录/行2013 年 3 月 25 日 (2013-05-25
),因为 mom_id
11926 的出生
日期是 2013 年 3 月 16 日 (2013-03 -16
)。
期望的结果:
individual_id born mom_id trap_date
13212 2013-03-16 11926 2014-06-26
13213 2013-03-16 11926 2013-07-23
13214 2013-03-16 11926 2015-06-01
13212 2013-03-16 11926 2014-06-26
11926 2010-04-08 10422 2013-01-23
11926 2010-04-08 10422 2013-02-01
11926 2010-04-08 10422 2013-08-23
11926 2010-04-08 10422 2013-09-01
11926 2010-04-08 10422 2013-10-23
11926 2010-04-08 10422 2013-12-01
如果有 dplyr
解决方案,我们将不胜感激,但如果此时有任何帮助,我将不胜感激!
最佳答案
我认为这符合您的要求。
mutate(df, in_individual = mom_id %in% individual_id) %>%
filter((!in_individual) | ((born - 35 <= trap_date) & (trap_date <= born + 70)))
关于r - if else 语句使用 R 中多列中的日期和匹配值来过滤行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68397881/