r - 如何删除包含超过 2000 个 NA 值的所有列?

标签 r dataframe na missing-data

我确实查找了一个类似的例子,它使用了

## 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/

相关文章:

r - R:将NA添加到数据帧

r - qdap 包 : bug in converting zero digits to "zero" words

python - 在 pandas Dataframe 的列上运行函数的有效方法?

用同一数据框中另一列的值替换单元格的 NA 值

r - 在 R 中分割日期

python-3.x - Pandas 当前行上方/下方的总和列

R 随机森林的意外 NA 输出

r - 使用 R 中的 data.table 将一列字符串拆分为可变数量的列

R for循环,如何在每次迭代的循环外部存储数据帧以避免性能下降

r - 如何测试字符数据框中的数值并将其转换为数值?