2012-08-03 24 views
11

Tengo una pregunta sobre el recuento de ceros por fila. Tengo un marco de datos como este:Cuenta el número de ceros por fila y elimina las filas con más de n ceros

a = c(1,2,3,4,5,6,0,2,5) 
b = c(0,0,0,2,6,7,0,0,0) 
c = c(0,5,2,7,3,1,0,3,0) 
d = c(1,2,6,3,8,4,0,4,0) 
e = c(0,4,6,3,8,4,0,6,0) 
f = c(0,2,5,5,8,4,2,7,4) 
g = c(0,8,5,4,7,4,0,0,0) 
h = c(1,3,6,7,4,2,0,4,2) 
i = c(1,5,3,6,3,7,0,5,3) 
j = c(1,5,2,6,4,6,8,4,2) 

DF<- data.frame(a=a,b=b,c=c,d=d,e=e,f=f,g=g,h=h,i=i,j=j) 

    a b c d e f g h i j 
1 1 0 0 1 0 0 0 1 1 1 
2 2 0 5 2 4 2 8 3 5 5 
3 3 0 2 6 6 5 5 6 3 2 
4 4 2 7 3 3 5 4 7 6 6 
5 5 6 3 8 8 8 7 4 3 4 
6 6 7 1 4 4 4 4 2 7 6 
7 0 0 0 0 0 2 0 0 0 8 
8 2 0 3 4 6 7 0 4 5 4 
9 5 0 0 0 0 4 0 2 3 2 

Quiero contar los números de ceros por fila. Si el número de ceros por fila es mayor que un cierto número, digamos 4, quiero eliminar la fila completa. El dataframe resultante se ve así:

a b c d e f g h i j 
2 2 0 5 2 4 2 8 3 5 5 
3 3 0 2 6 6 5 5 6 3 2 
4 4 2 7 3 3 5 4 7 6 6 
5 5 6 3 8 8 8 7 4 3 4 
6 6 7 1 4 4 4 4 2 7 6 
8 2 0 3 4 6 7 0 4 5 4 

¿Es eso posible? ¡Gracias!

Respuesta

29

que no sólo es posible, pero muy fácil:

DF[rowSums(DF == 0) <= 4, ] 

Usted podría también utilizar apply:

DF[apply(DF == 0, 1, sum) <= 4, ] 
Cuestiones relacionadas