簡體   English   中英

如何過濾掉 Tidyverse 中 1 列為空的組

[英]How to filter out groups empty for 1 column in Tidyverse

tibble(
  A = c("A","A","B","B"),
  x = c(NA,NA,NA,1),
  y = c(1,2,3,4),
) %>% group_by(A) -> df

所需 output:

tibble(
  A = c("B","B"),
  x = c(NA,1)
  y = c(3,4),
)

我想找到所有xx的所有元素都是NA的組,然后刪除這些組。 "B"被過濾掉,因為它至少有 1 個非NA元素。

我試過了:

df %>%
  filter(all(!is.na(x)))

但如果它發現至少 1 個 NA,它似乎會被過濾掉; 我需要正確的詞,不是all

如果x的所有元素都是NA ,這將刪除列A組:

library(dplyr)

df %>%
  group_by(A) %>%
  filter(! all(is.na(x)))

# A tibble: 2 × 3
# Groups:   A [1]
#  A         x     y
#  <chr> <dbl> <dbl>
#1 B        NA     3
#2 B         1     4

請注意,組"A"已被刪除,因為x列中的兩個單元格均未定義。

我們可以使用any with complete.cases

library(dplyr)
df %>% 
  group_by(A) %>% 
  filter(any(complete.cases(x))) %>% 
  ungroup

-輸出

# A tibble: 2 × 3
  A         x     y
  <chr> <dbl> <dbl>
1 B        NA     3
2 B         1     4

dplyrdevel版本中,我們可以在filter中使用.by因此我們不需要group_by/ungroup

df %>%  
  filter(any(complete.cases(x)), .by = 'A')
# A tibble: 2 × 3
  A         x     y
  <chr> <dbl> <dbl>
1 B        NA     3
2 B         1     4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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