【问题标题】:How to drop all variables/columns without content from a data frame in R? [duplicate]如何从 R 中的数据框中删除所有没有内容的变量/列? [复制]
【发布时间】:2020-10-01 14:51:14
【问题描述】:

考虑到我的数据集很大而且更复杂(更多的列和行)。

这将是一个更简单的集合作为示例:

A <- rep(NA,10)
B <- rep(2,10)
C <- rep(NA,10)
D <- rep('B',10)
E <- c('NA',rep('XY',9))

dat <- data.frame(A,B,C,D,E)

    A B  C D  E
1  NA 2 NA B NA
2  NA 2 NA B XY
3  NA 2 NA B XY
4  NA 2 NA B XY
5  NA 2 NA B XY
6  NA 2 NA B XY
7  NA 2 NA B XY
8  NA 2 NA B XY
9  NA 2 NA B XY
10 NA 2 NA B XY

变量 A 和变量 B 不包含任何数据。 我想从 data.frame 中删除仅包含 NA 的所有变量,以便保留具有内容的变量。 欢迎使用 dplyr 解决方案,但也欢迎其他解决方案。

【问题讨论】:

标签: r dplyr


【解决方案1】:

使用colSums + is.na 的基本 R 选项

> dat[colSums(is.na(dat))!=nrow(dat)]
   B D    E
1  2 B <NA>
2  2 B   XY
3  2 B   XY
4  2 B   XY
5  2 B   XY
6  2 B   XY
7  2 B   XY
8  2 B   XY
9  2 B   XY
10 2 B   XY

【讨论】:

    【解决方案2】:

    您可以使用dplyr

    library(dplyr)
    dat %>%
        select_if(~ !any(is.na(.)))
    

    【讨论】:

      【解决方案3】:

      尝试使用NA 为变量建立索引:

      #Index
      i1 <- apply(dat,2,function(x)length(which(is.na(x))))
      i2 <- which(i1==nrow(dat))
      dat <- dat[,-i2]
      

      输出:

         B D  E
      1  2 B NA
      2  2 B XY
      3  2 B XY
      4  2 B XY
      5  2 B XY
      6  2 B XY
      7  2 B XY
      8  2 B XY
      9  2 B XY
      10 2 B XY
      

      【讨论】:

        猜你喜欢
        • 2017-07-13
        • 1970-01-01
        • 2016-01-16
        • 1970-01-01
        • 1970-01-01
        • 2022-06-10
        • 2012-11-01
        • 1970-01-01
        • 2014-11-30
        相关资源
        最近更新 更多