2013-05-30 3 views
-1

Я хотел бы исключить строки в фрейме данных, которые содержат все 0.исключить строки, содержащие все 0

Я могу проверить, содержит ли строка 0 или нет, используя% in% operator. Но нужно знать, как перебирать всю матрицу. а затем распечатать новую матрицу, исключая другие строки.

Как я могу это достичь?

+2

Что вы пробовали? Можете ли вы опубликовать фрагмент или два кода, которые вы написали до сих пор? Как выглядят ваши данные? Поместите некоторые из них, используя 'dput (head (yourdata))'. Прямо сейчас звучит так, будто вы хотите, чтобы мы написали вам ваш код! Но, подсказка в правильном направлении: взгляните на функции '? All' и'? Any'. – Justin

ответ

4

Используя данные примера сеньора Выходов (DF <- data.frame(A=rep(c(1,0),5), B=0)), попробуйте:

DF[!rowSums(DF == 0) == ncol(DF), ] 
+0

+1 - или 'DF [rowSums (DF! = 0)> 0,]' – flodel

1

Это должно работать:

AllZeros = apply(DF, 1, function(X) all(X==0)) 
DF2 = DF[!AllZeros,] 

Попробуйте с:

DF <- data.frame(A=rep(c(1,0),5), B=0) 

В выборочных данных.

+1

Короче и быстрее будет 'AnyNonZero = apply (DF! = 0, 1, any)', затем 'DF [AnyNonZero,]'. Тем не менее, несмотря на короткое замыкание, я уверен, что решение Ананды все равно будет намного быстрее, если количество столбцов не станет очень большим. – flodel

1

Есть тонна способов сделать это, как ребята, которые ответили до сих пор покажет вам.

Я приведу еще один пример этого набора данных этого примера.

DF <- data.frame(A=rep(c(1,0),5), B=0) 

Команда subset хорошо работает.

newDF <- subset(DF, !(A == 0 & B == 0)) 

В зависимости от размера вашей матрицы и именования вашего переменных, это может быть утомительным и в этом случае я бы прямо к функции применяется.

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