R фильтровать имена строк в матрице

#r #row #dataframe

#r #строка #фрейм данных

Вопрос:

У меня есть фрейм данных, подобный z:

 z <- matrix(c(1,0,0,1,1,0,0,
          1,0,0,0,1,0,0,
          0,0,0,0,0,0,0,
          0,0,1,0,0,0,0),
        nrow=7,
        dimnames=list(LETTERS[1:7],NULL))

   [,1] [,2] [,3] [,4]
A    1    1    0    0
B    0    0    0    0
C    0    0    0    1
D    1    0    0    0
E    1    1    0    0
F    0    0    0    0
G    0    0    0    0
  

Теперь я хочу удалить все строки, где все значения равны нулю. Чем результат будет:

    [,1] [,2] [,3] [,4]
A    1    1    0    0
C    0    0    0    1
D    1    0    0    0
E    1    1    0    0
  

Спасибо!

Комментарии:

1. У вас есть матрица, а не фрейм данных 🙂

Ответ №1:

Используйте all() и apply() :

 z <- matrix(c(1,0,0,1,1,0,0,
          1,0,0,0,1,0,0,
          0,0,0,0,0,0,0,
          0,0,1,0,0,0,0),
        nrow=7,
        dimnames=list(LETTERS[1:7],NULL))

all.0 <- apply(z, 1, function(i) all(i==0))
z[!all.0,]
  

Результат:

   [,1] [,2] [,3] [,4]
A    1    1    0    0
C    0    0    0    1
D    1    0    0    0
E    1    1    0    0
  

Ответ №2:

А также, если весь элемент имеет положительное числовое значение, вы можете сделать это с помощью rowSums :

 > z[rowSums(z)>0,]
  [,1] [,2] [,3] [,4]
A    1    1    0    0
C    0    0    0    1
D    1    0    0    0
E    1    1    0    0
  

это немного сложно, и подход @Vincent является более общим.