代码之家  ›  专栏  ›  技术社区  ›  msn

只保留符合条件的列

  •  1
  • msn  · 技术社区  · 3 年前

    我有一个大数据框,它的值是 TRUE , FALSE NA .我只想保留至少包含一个 符合事实的 价值你如何做到这一点?

    下面是一个简单的例子:

    df <- data.frame(
       c1 = c(FALSE,FALSE,FALSE,FALSE),
       c2 = c(FALSE,TRUE,FALSE,NA),
       c3 = c(FALSE,NA,TRUE,NA),
       c4 = c(FALSE,FALSE,NA,NA)
     )
    > df
         c1    c2    c3    c4
    1 FALSE FALSE FALSE FALSE
    2 FALSE  TRUE    NA FALSE
    3 FALSE FALSE  TRUE    NA
    4 FALSE    NA    NA    NA
    

    我想删除列 c1 c4 ,只保留 c2 c3 .我知道 符合事实的 值存在于我原来较大的数据框中(使用 table(df==TRUE) ),但我不知道使用哪个函数来标识它们的列。

    1 回复  |  直到 3 年前
        1
  •  1
  •   akrun    3 年前

    我们可以使用 select 具有 any

    library(dplyr)
    df %>%
       select(where(~ is.logical(.x) && any(.x, na.rm = TRUE)))
    

    -输出

      c2    c3
    1 FALSE FALSE
    2  TRUE    NA
    3 FALSE  TRUE
    4    NA    NA
    

    或者在 base R 具有 colSums 并检查总和是否大于1( TRUE ->1和 FALSE ->0)

    df[colSums(df, na.rm = TRUE) > 0]
    

    -输出

       c2    c3
    1 FALSE FALSE
    2  TRUE    NA
    3 FALSE  TRUE
    4    NA    NA