gpt4 book ai didi

r - 在 R 中,如何删除值全为 FALSE 的列?

转载 作者:行者123 更新时间:2023-12-04 14:35:19 27 4
gpt4 key购买 nike

我有一个数据框,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 RFilterany

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真的
library(purrr)
df %>%
select(where(~ is.logical(.) && any(.)), where(negate(is.logical)))

关于r - 在 R 中,如何删除值全为 FALSE 的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65603422/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com