在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 RFilter和一起使用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类型为anyTRUE 的列

library(purrr)
df %>% 
  select(where(~ is.logical(.) && any(.)), where(negate(is.logical)))


以上是在R中,如何删除值全为FALSE的列?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>