如何从R中的数据帧中删除没有内容的所有变量/列?

如何从R中的数据帧中删除没有内容的所有变量/列?,r,dplyr,R,Dplyr,考虑到我的数据集很大而且更复杂(更多的列和行) 作为示例,这将是一个更简单的集合: 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

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

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

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尝试使用变量索引
NA

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

尝试使用带有
NA
的变量索引:

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

您可以使用
dplyr

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

您可以使用
dplyr

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

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

> 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
>dat[colSums(is.na(dat))!=nrow(dat)]
B、D、E
1.2 B
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
102B XY

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

> 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
>dat[colSums(is.na(dat))!=nrow(dat)]
B、D、E
1.2 B
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
102B XY
我会做
过滤(函数(x)!all(is.na(x)),dat)
,但似乎已经有一个像你这样的主题了-我会做
过滤(函数(x)!all(is.na(x)),dat)
,但似乎已经有一个像你这样的主题了-