我确实查找了一个类似的例子,它使用了
## 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)]
但我不确定如何将其转换为数字而不是百分比。
最佳答案
一个 base R
选项可以是:
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
或者使用指定的数字:
dat[, colSums(is.na(dat)) <= 5]
或者以行数的一半为标准:
dat[, colSums(is.na(dat)) <= nrow(dat)/2]
与 dplyr
相同的想法:
dat %>%
select_if(~ mean(is.na(.)) <= 0.5)
或者使用指定的数字:
dat %>%
select_if(~ sum(is.na(.)) <= 5)
同样,以行数的一半为标准:
dat %>%
select_if(~ sum(is.na(.)) <= length(.)/2)
关于r - 如何删除包含超过 2000 个 NA 值的所有列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60359777/