繁体   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