#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 является более общим.