r - 按日期过滤,按条件分组
Posted
技术标签:
【中文标题】r - 按日期过滤,按条件分组【英文标题】:r - filter by date with group by condition 【发布时间】:2021-10-30 06:16:07 【问题描述】:在 R 中,使用 dplyr
我想为每个组过滤大于一个日期。
下面给了我结果,但我想知道是否有更优雅的方法来获得相同的结果。不使用mutate
是否可以过滤?
max_dates <- data.frame(col_1 = c('a', 'b', 'c'), max_date = c('2021-08-23', '2021-07-19', '2021-07-02'))
df <- data.frame(col_1 = c(rep('a', 10), rep('b', 10), rep('c', 10)),
date = rep(seq(as.Date('2021-07-01'), by = 'week', length.out = 10), 3))
desired_df <- df %>%
left_join(max_dates, by = 'col_1') %>%
mutate(greater_than = ifelse(date >= max_date, T, F)) %>%
filter(greater_than)
【问题讨论】:
是的,只需将您的date >= max_date
移动到filter
。
【参考方案1】:
您不需要 mutate 参数;将条件移至过滤器参数...
library(dplyr)
df %>%
left_join(max_dates, by = 'col_1') %>%
filter(date >= max_date)
#> col_1 date max_date
#> 1 a 2021-08-26 2021-08-23
#> 2 a 2021-09-02 2021-08-23
#> 3 b 2021-07-22 2021-07-19
#> 4 b 2021-07-29 2021-07-19
#> 5 b 2021-08-05 2021-07-19
#> 6 b 2021-08-12 2021-07-19
#> 7 b 2021-08-19 2021-07-19
#> 8 b 2021-08-26 2021-07-19
#> 9 b 2021-09-02 2021-07-19
#> 10 c 2021-07-08 2021-07-02
#> 11 c 2021-07-15 2021-07-02
#> 12 c 2021-07-22 2021-07-02
#> 13 c 2021-07-29 2021-07-02
#> 14 c 2021-08-05 2021-07-02
#> 15 c 2021-08-12 2021-07-02
#> 16 c 2021-08-19 2021-07-02
#> 17 c 2021-08-26 2021-07-02
#> 18 c 2021-09-02 2021-07-02
由reprex package (v2.0.0) 于 2021 年 8 月 31 日创建
【讨论】:
【参考方案2】:我们可以使用非等值连接
library(data.table)
setDT(df)[, date1 := date][max_dates, on = .(col_1, date1 >= max_date)]
-输出
col_1 date date1
1: a 2021-08-26 2021-08-23
2: a 2021-09-02 2021-08-23
3: b 2021-07-22 2021-07-19
4: b 2021-07-29 2021-07-19
5: b 2021-08-05 2021-07-19
6: b 2021-08-12 2021-07-19
7: b 2021-08-19 2021-07-19
8: b 2021-08-26 2021-07-19
9: b 2021-09-02 2021-07-19
10: c 2021-07-08 2021-07-02
11: c 2021-07-15 2021-07-02
12: c 2021-07-22 2021-07-02
13: c 2021-07-29 2021-07-02
14: c 2021-08-05 2021-07-02
15: c 2021-08-12 2021-07-02
16: c 2021-08-19 2021-07-02
17: c 2021-08-26 2021-07-02
18: c 2021-09-02 2021-07-02
【讨论】:
以上是关于r - 按日期过滤,按条件分组的主要内容,如果未能解决你的问题,请参考以下文章
具有特定条件计数的 Mongodb 聚合并按输出投影的日期范围过滤不能按预期工作