## Some sample data
set.seed(0)
dat <- matrix(1:100, 10, 10)
dat[sample(1:100, 50)] <- NA
dat <- data.frame(dat)
## Remove columns with more than 50% NA
dat[, -which(colMeans(is.na(dat)) > 0.5)]
dat[, colMeans(is.na(dat)) <= 0.5]
X1 X2 X4 X5 X6 X8 X10
1 NA 11 NA NA NA 71 NA
2 NA 12 32 NA 52 72 NA
3 3 NA 33 NA 53 73 93
4 4 14 NA 44 NA NA 94
5 5 15 35 NA 55 75 95
6 NA NA 36 46 NA 76 NA
7 NA NA NA 47 57 NA 97
8 8 18 NA 48 NA 78 98
9 9 NA 39 NA 59 79 99
10 NA NA 40 50 NA 80 100
purrr::discard(dat, ~sum(is.na(.x)) > 5)
X1 X2 X3 X5 X6 X7 X8
1 NA 11 NA 41 NA 61 71
2 NA 12 NA NA 52 62 NA
3 3 13 23 NA 53 63 NA
4 4 NA NA NA NA NA NA
5 5 15 NA NA 55 65 NA
6 NA 16 26 46 56 66 76
7 NA 17 27 47 57 67 77
8 8 NA NA 48 58 NA 78
9 9 19 29 49 NA NA NA
10 10 NA 30 50 60 NA 80
或者:
purrr::keep(dat, ~sum(is.na(.x)) <= 5)
X1 X2 X3 X5 X6 X7 X8
1 NA 11 NA 41 NA 61 71
2 NA 12 NA NA 52 62 NA
3 3 13 23 NA 53 63 NA
4 4 NA NA NA NA NA NA
5 5 15 NA NA 55 65 NA
6 NA 16 26 46 56 66 76
7 NA 17 27 47 57 67 77
8 8 NA NA 48 58 NA 78
9 9 19 29 49 NA NA NA
10 10 NA 30 50 60 NA 80
4条答案
按热度按时间rjzwgtxy1#
一个
base R
选项可以是:或使用特定的数字:
或者使用一半的行作为标准:
对于
dplyr
也有同样的想法:或使用特定的数字:
同样,使用一半的行作为标准:
pdsfdshx2#
或者你也可以数一数:
8i9zcol23#
使用
purrr
:或者:
cl25kdpy4#
我把它乘以100,使它保持为百分比。因为你应该看起来像这样: