我有一个数据:
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
,不带前缀(all
,at
,if
)。
答案 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