簡體   English   中英

按組過濾數據並保留空組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM