Удалите строки в 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, ]