Удалите строки в R-матрице, где все данные равны NA
Возможный дубликат:
Удаление пустых строк файла данных в R
Как удалить строки из матрицы или фрейма данных, где все элементы в строке являются NA?
Итак, чтобы получить от этого:
[,1] [,2] [,3]
[1,] 1 6 11
[2,] NA NA NA
[3,] 3 8 13
[4,] 4 NA NA
[5,] 5 10 NA
:
[,1] [,2] [,3]
[1,] 1 6 11
[2,] 3 8 13
[3,] 4 NA NA
[4,] 5 10 NA
Поскольку проблема с na.omit заключается в том, что она удаляет строки с любыми NA и поэтому дает мне это:
[,1] [,2] [,3]
[1,] 1 6 11
[2,] 3 8 13
Лучшее, что я смог сделать до сих пор, это использовать функцию apply():
> x[apply(x, 1, function(y) !all(is.na(y))),]
[,1] [,2] [,3]
[1,] 1 6 11
[2,] 3 8 13
[3,] 4 NA NA
[4,] 5 10 NA
но это кажется довольно запутанным (есть ли что-то более простое, что мне не хватает?)....
Спасибо.
Ответы
Ответ 1
rowSums() решения обычно превосходят apply():
m <- structure(c(1, NA, 3, 4, 5,
6, NA, 8, NA, 10,
11, NA, 13, NA, NA), .
Dim = c(5L, 3L))
> m[rowSums(is.na(m))!=ncol(m), ]
[,1] [,2] [,3]
[1,] 1 6 11
[2,] 3 8 13
[3,] 4 NA NA
[4,] 5 10 NA
Ответ 2
Проведите тест для all(is.na())
по строкам и удалите где true. Что-то вроде этого (непроверенный, поскольку вы не предоставили код для генерации ваших данных - dput()
- ваш друг):
R> ind <- apply(X, 1, function(x) all(is.na(x)))
R> X <- X[ !ind, ]