【发布时间】:2021-11-25 16:05:33
【问题描述】:
我有两个数据集,我想先加入,然后根据条件过滤每个组(id, code)。对于每个组,如果end_date 早于date,我想简单地过滤最新的end_date。否则,我想过滤 date 位于两列之间的行,start_date 和 end_date。
我已经使用dplyr 对此进行了编码,它可以工作 - 见下文。
left_join(df, df_match, by='id') %>%
group_by(id, code) %>%
mutate(is.max = max(end_date) < date) %>%
filter(case_when(
is.max == T ~ end_date == max(end_date),
is.max == F ~ date >= start_date & date <= end_date
))
但是,对于我的 1+ 百万行数据集,此代码非常慢。我很好奇是否可以使用data.table 来实现相同的目标,这通常更快?
【问题讨论】:
-
有趣的问题,但请提供minimal reproducible example,包括预期结果。由于当前编写的问题,尚不清楚哪一列来自哪个data.frame。为了找到聪明的答案,有必要了解全貌,并有一些数据进行测试。
标签: r data.table