在 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
假设我有这样的数据:
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