删除更多缺少x%的列/行 [英] Delete columns/rows with more that x% missing

查看:90
本文介绍了删除更多缺少x%的列/行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想删除数据框中超过50% NA 的所有列或行。

I want to delete all columns or rows with more than 50% NAs in a data frame.

这是我的解决方案:

# delete columns with more than 50% missings
miss <- c()
for(i in 1:ncol(data)) {
  if(length(which(is.na(data[,i]))) > 0.5*nrow(data)) miss <- append(miss,i) 
}
data2 <- data[,-miss]


# delete rows with more than 50% percent missing
miss2 <- c()
for(i in 1:nrow(data)) {
  if(length(which(is.na(data[i,]))) > 0.5*ncol(data)) miss2 <- append(miss2,i) 
}
data <- data[-miss,]

但我正在寻找一个更好/更快的解决方案。

but I'm looking for a nicer/faster solution.

我也会欣赏一个 dplyr 解决方案

I would also appreciate a dplyr solution

推荐答案

要删除一些NA的列,您可以使用 colMeans(is.na(...))

To remove columns with some amount of NA, you can use colMeans(is.na(...))

## 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)]

同样对于行,使用 rowMeans

这篇关于删除更多缺少x%的列/行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆