una - eliminar filas con valores na en r
¿Cómo eliminar filas con un valor cero en R? (6)
Bueno, podrías cambiar tus 0
por NA
y luego usar una de esas soluciones, pero por el bien de la diferencia, podrías notar que un número solo tendrá un logaritmo finito si es mayor que 0
, por lo que rowSums
of the log
solo será finito si no hay ceros en una fila.
dfr[is.finite(rowSums(log(dfr[-1]))),]
Tengo un problema para resolver cómo eliminar filas con un valor de Cero en R. En otras na.omit()
, puedo usar na.omit()
para eliminar todos los valores de NA o usar complete.cases()
para eliminar filas que contengan valores de NA.
¿Hay alguien que sepa cómo eliminar filas con valores de cero en R?
Por ejemplo :
antes de
| DateTime | Mac1 | Mac2 | Mac3 | Mac4 |
----------------------------------------------------
| 2011-04-02 06:00 | 20 | 0 | 20 | 20 |
| 2011-04-02 06:05 | 21 | 21 | 21 | 21 |
| 2011-04-02 06:10 | 22 | 22 | 22 | 22 |
| 2011-04-02 06:15 | 23 | 23 | 0 | 23 |
| 2011-04-02 06:20 | 24 | 24 | 24 | 24 |
| 2011-04-02 06:25 | 0 | 25 | 25 | 0 |
Después
| DateTime | Mac1 | Mac2 | Mac3 | Mac4 |
----------------------------------------------------
| 2011-04-02 06:05 | 21 | 21 | 21 | 21 |
| 2011-04-02 06:10 | 22 | 22 | 22 | 22 |
| 2011-04-02 06:20 | 24 | 24 | 24 | 24 |
Hay algunas maneras diferentes de hacer esto. Prefiero usar apply
, ya que es fácilmente extensible:
##Generate some data
dd = data.frame(a = 1:4, b= 1:0, c=0:3)
##Go through each row and determine if a value is zero
row_sub = apply(dd, 1, function(row) all(row !=0 ))
##Subset as usual
dd[row_sub,]
Prefiero una adaptación simple del método de csgillespie, por encima de la necesidad de una definición de función:
d[apply(d!=0, 1, all),]
donde d
es su marco de datos.
Probablemente aceptaría la sugerencia de Joran de reemplazar los 0 con los NA y luego usar las funciones integradas que mencionaste. Si no puede / no quiere hacer eso, un enfoque es usar any()
para encontrar filas que contengan 0 y subcontratarlas:
set.seed(42)
#Fake data
x <- data.frame(a = sample(0:2, 5, TRUE), b = sample(0:2, 5, TRUE))
> x
a b
1 2 1
2 2 2
3 0 0
4 2 1
5 1 2
#Subset out any rows with a 0 in them
#Note the negation with ! around the apply function
x[!(apply(x, 1, function(y) any(y == 0))),]
a b
1 2 1
2 2 2
4 2 1
5 1 2
Para implementar el método de Joran, algo como esto debería ayudarte a comenzar:
x[x==0] <- NA
Puedes usar el filtro del paquete dplyr.
Llamemos a tu marco de datos df
library(dplyr) df1 <- filter(df, Mac1 > 0, Mac2 > 0, Mac3 > 0, Mac4 > 0)
df1 solo tendrá filas con entradas por encima de cero. Espero que esto ayude.
Yo haría lo siguiente.
Establecer el cero a NA.
data[data==0] <- NA
data
Eliminar las filas asociadas con NA.
data2<-data[complete.cases(data),]