[英]Filter data by group & preserve empty groups
我想知道如何按组filter
我的数据,并保留空的组?
例子:
year = c(1,2,3,1,2,3,1,2,3)
site = rep(c("a", "b", "d"), each = 3)
value = c(3,3,0,1,8,5,10,18,27)
df <- data.frame(year, site, value)
我想对value
大于 5 的行进行子集化。对于某些组,这从来都不是真的。 Filter
功能只是跳过空组。
如何保留我的空组并改为使用 NA? 理想情况下,我想使用dplyr
而不是base
R。
我的过滤方法,其中.preserve
不保留空组:
df %>%
group_by(site) %>%
filter(value > 5, .preserve = TRUE)
预期输出:
year site value
<dbl> <fct> <dbl>
1 NA a NA
2 2 b 8
3 1 d 10
4 2 d 18
5 3 d 27
添加tidyr
,您可以执行以下操作:
df %>%
group_by(site) %>%
filter(value > 5) %>%
ungroup() %>%
complete(site = df$site)
site year value
<fct> <dbl> <dbl>
1 a NA NA
2 b 2 8
3 d 1 10
4 d 2 18
5 d 3 27
或者,如果您想将其保留在dplyr
:
df %>%
group_by(site) %>%
filter(value > 5) %>%
bind_rows(df %>%
group_by(site) %>%
filter(all(value <= 5)) %>%
summarise_all(~ NA))
使用tidyr
的嵌套功能并应用purrr::map
df %>%
group_by(site) %>%
tidyr::nest() %>%
mutate(data = purrr::map(data, . %>% filter(value > 5))) %>%
tidyr::unnest(cols=c(data), keep_empty = TRUE)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.