Удалить столбцы/строки с пропуском более x%
Я хочу удалить все столбцы или строки с более чем 50% NA
в фрейме данных.
Это мое решение:
# 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,]
но я ищу лучшее/быстрое решение.
Я также был бы признателен за решение dplyr
Ответы
Ответ 1
Чтобы удалить столбцы с некоторым количеством NA, вы можете использовать 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
.
Ответ 2
Решение tidyverse
, которое удаляет столбцы с x% NA
s (50%) здесь:
test_data <- data.frame(A=c(rep(NA,12),
520,233,522),
B = c(rep(10,12),
520,233,522))
# Remove all with %NA >= 50
# can just use >50
test_data %>%
purrr::discard(~sum(is.na(.x))/length(.x)* 100 >=50)
Результат:
B
1 10
2 10
3 10
4 10
5 10
6 10
7 10
8 10
9 10
10 10
11 10
12 10
13 520
14 233
15 522