在 R 中过滤掉 dplyr 中的组后,如何返回非聚合数据?

How do I get back to the non-aggregated data after filtering out groups in dplyr within R?

假设我有这样的数据:

id = c(1,1,2,2,3,3)
date = as.Date(c('2018-01-02', '2018-01-03', '2017-07-01', '2018-01-02', '2017-08-02', '2017-08-03'))
df <- data.frame(id, date)

id date
1  2018-01-02
1  2018-01-03
2  2017-07-01
2  2018-01-02
3  2017-08-02
3  2017-08-03

我想过滤掉所有日期不早于 2018-01-01 的 ID。这是我想要到达的table:

id date
2  2017-07-01
2  2018-01-02
3  2017-08-02
3  2017-08-03

我可以用这个过滤掉我不想要的组:

library(dplyr)
df %>% group_by(id) %>%
summarise(min_date = min(date)) %>%
filter(min_date <= as.Date('2018-01-01'))

但这给了我汇总结果。

 id min_date    
  2 2017-07-01
  3 2017-08-02

我真正想要的是去除了id 1s的原始未聚合数据。

我正在使用 sparklyr 和 dplyr。

您可以将 group_by %>% filter 与分组聚合过滤条件一起使用:

df %>% group_by(id) %>% filter(any(date < '2018-01-01'))
# note any(date < '2018-01-01') returns a boolean scalar for each group and determine whether
# rows in the group should be kept or not

# A tibble: 4 x 2
# Groups:   id [2]
#     id date      
#  <dbl> <date>    
#1     2 2017-07-01
#2     2 2018-01-02
#3     3 2017-08-02
#4     3 2017-08-03