在R中,如何删除值全为FALSE的列?
我有一个数据框,df
. 它的一些列包括逻辑。我想放弃那些都是FALSE
。
library(tibble)
df <- tibble(A = rep(TRUE, 5),
B = rep(FALSE, 5),
C = c(TRUE, FALSE, TRUE, TRUE, FALSE))
df
# A tibble: 5 x 3
A B C
<lgl> <lgl> <lgl>
1 TRUE FALSE TRUE
2 TRUE FALSE FALSE
3 TRUE FALSE TRUE
4 TRUE FALSE TRUE
5 TRUE FALSE FALSE
所需的输出是:
A C
<lgl> <lgl>
1 TRUE TRUE
2 TRUE FALSE
3 TRUE TRUE
4 TRUE TRUE
5 TRUE FALSE
我曾尝试使用 janitor 包选择常量列,但这将删除所有列TRUE
。
我该怎么做?(我更喜欢 tidyverse 解决方案,但除了基本 R 或其他一些可用的包是可以接受的。)
编辑:我上面的最小工作示例太小了。我应该提到我也想保留一些非逻辑列。akrun 在聊天中为我提供的解决方案是:
library(dplyr)
library(purrr)
df %>% select(where(~ is.logical(.) && any(.)), where(negate(is.logical)))
回答
base R
与Filter
和一起使用any
Filter(any, df)
或者在 dplyr
library(dplyr)
df %>%
select(where(any))
-输出
# A tibble: 5 x 2
# A C
# <lgl> <lgl>
#1 TRUE TRUE
#2 TRUE FALSE
#3 TRUE TRUE
#4 TRUE TRUE
#5 TRUE FALSE
根据 OP 的评论,希望保留类型不符合逻辑的列以及logical
类型为any
TRUE 的列
library(purrr)
df %>%
select(where(~ is.logical(.) && any(.)), where(negate(is.logical)))