如何删除具有相同值的列(dplyr :: select)?

时间:2020-08-13 07:02:19

标签: r

我有一个数据:

df <- data.frame(
  x = c('col', NA, 1), 
  y = c('s', NA, 3), 
  w = c(0, 0, 0), 
  z = c(NA_character_, NA_character_, NA_character_)
)

     x    y w    z
1  col    s 0 <NA>
2 <NA> <NA> 0 <NA>
3    1    3 0 <NA>

首先,我要删除w列(所有值0)。预期结果是:

     x    y    z
1  col    s <NA>
2 <NA> <NA> <NA>
3    1    3 <NA>

第二,我要删除z列(所有值NA)。预期结果是:

     x    y w
1  col    s 0
2 <NA> <NA> 0
3    1    3 0

我尝试:

library(dplyr)

df %>% 
  select(.data = ., is.na)

错误:结果1必须是单个逻辑,而不是长度为3的逻辑向量

我只想使用此select,不带前缀(allatif

2 个答案:

答案 0 :(得分:3)

您可以使用select where个唯一值大于1的数字。

library(dplyr)
df %>% select(where(~n_distinct(.) > 1))

#     x    y
#1  col    s
#2 <NA> <NA>
#3    1    3

答案 1 :(得分:1)

我们可以在Filter中使用base R

Filter(function(x) length(unique(x)) > 1, df)
#     x    y
#1  col    s
#2 <NA> <NA>
#3    1    3