2011-05-11 13 views
22

digamos, por ejemplo, tengo estos datos:fila retirar con valor nan

data <- c(1,2,3,4,5,6,NaN,5,9,NaN,23,9) 
attr(data,"dim") <- c(6,2) 
data 

    [,1] [,2] 
[1,] 1 NaN 
[2,] 2 5 
[3,] 3 9 
[4,] 4 NaN 
[5,] 5 23 
[6,] 6 9 

ahora quiero quitar las filas con el NaN valora en ella: la fila 1 y 4. Pero yo no' Sé dónde están estas filas, si se trata de un conjunto de datos de más de 100.000 filas, por lo que necesito encontrarlas con una función y eliminar la fila completa.

¿Alguien puede señalarme en la dirección correcta?

Respuesta

37

La función complete.cases le dirá donde las filas son que usted necesita:

data <- matrix(c(1,2,3,4,5,6,NaN,5,9,NaN,23,9), ncol=2) 
data[complete.cases(data), ] 

    [,1] [,2] 
[1,] 2 5 
[2,] 3 9 
[3,] 5 23 
[4,] 6 9 
5

DATOS

data <- matrix(rnorm(100000000), ncol=10000) 
idx <- sample(1:10000,100) 
idy <- sample(1:10000,100) 
data[idx,idy] <- NaN 

FUNCIÓN

foo <- function(d=data) d[apply(d,2,function(x) any(is.nan(x))),] 

tiempos de ejecución

> system.time(data[complete.cases(data),]) 
    user system elapsed 
    3.53 0.12 3.65 

> system.time(foo(data)) 
    user system elapsed 
    2.37 0.09 2.46 
+1

¿No debería ser esto 'd [! Apply (d, 1, función (x) any (is.nan (x))),]'? (usando el "1" para la dimensión en lugar de "2", y teniendo el "!" para obtener solo las líneas que no tienen NaN?) – MeloMCR

Cuestiones relacionadas