2015-08-10 4 views
1

У меня есть матрица с именем дм:Как отредактировать эту матрицу R?

 a b c d e f g h 

cat 0 0 0 0 0 0 0 0 

dog 1 0 1 0 0 0 0 1 

fish 1 1 1 0 0 0 0 0 

egg 0 0 0 0 0 0 0 0 

Как удалить строки, идут все нули через как кошка и яйцо. Так что я могу закончить с этим только -

 a b c d e f g h 

dog 1 0 1 0 0 0 0 1 

fish 1 1 1 0 0 0 0 0 
+1

не предполагая ничего, кроме 0 или 1: 'дх [rowSums (Dx) = 0,] ' – jeremycg

+0

@jeremycg - работает здесь (как вы сказали, работает только в том случае, если ваши значения равны 0 и 1), но комментарий Фрэнка ниже показывает, как это может потерпеть неудачу, если у вас есть другие значения (вероятно, релевантные для OP) – scribbles

+0

^Спасибо так много –

ответ

0
zeros_removed = apply(dx, 1, function(row) all(row !=0)) 
dx[zeros_removed,] 
+0

@MichaelChirico - Спасибо. Ошибка новичков, чтобы забыть отформатировать мой ответ как код. – scribbles

+0

Нет проблем. Для справки другое решение выполняется намного быстрее, потому что 'rowSums' оптимизирован. «apply», с другой стороны, хорошо знать для более общих ситуаций с несколькими строками (когда мы не можем использовать 'sum'). – MichaelChirico

2

Вы можете попробовать что-то вроде этого:

m<-matrix(c(1,1,1,0, 
     0,0,0,0, 
     1,0,1,0, 
     0,0,0,0, 
     1,1,1,1),ncol=4,byrow=T) 
m[rowSums(abs(m))!=0,] 
+1

@Frank Хороший! не думал об этом .. спасибо! – Andrelrms

+3

Np, вот тупой вариант: 'm [!! rowSums (!! m),]' работает, потому что 'x! = 0' работает так же, как' !! x' – Frank

Смежные вопросы