Quiero probar dos cosas :

  1. ¿Cómo puedo eliminar las filas que contienen NA/NaN/Inf
  2. ¿Cómo puedo ajustar el valor del punto de datos de NA/NaN/Inf a 0.

Hasta ahora, he intentado usar los siguientes para los valores de NA, pero estado recibiendo las advertencias.

> eg <- data[rowSums(is.na(data)) == 0,]
 Error in rowSums(is.na(data)) : 
       'x' must be an array of at least two dimensions
     In addition: Warning message:
     In is.na(data) : is.na() applied to non-(list or vector) of type 'closure'
La advertencia es porque no se ha definido data, que es también una función en la utils paquete. I. e., llamaban is.na en una función, que no tiene sentido.
Post relacionados: stackoverflow.com/questions/7518245/…

OriginalEl autor user2199881 | 2013-04-02

4 Comentarios

  1. 34

    Creo que voy a tirar mi sombrero en el anillo con mis métodos preferidos:

    # sample data
    m <- matrix(c(1,2,NA,NaN,1,Inf,-1,1,9,3),5)
    # remove all rows with non-finite values
    m[!rowSums(!is.finite(m)),]
    # replace all non-finite values with 0
    m[!is.finite(m)] <- 0

    OriginalEl autor Joshua Ulrich

  2. 12
    library(functional)
    m[apply(m, 1, Compose(is.finite, all)),]

    Demostración:

    m <- matrix(c(1,2,3,NA,4,5), 3)
    m
    ##      [,1] [,2]
    ## [1,]    1   NA
    ## [2,]    2    4
    ## [3,]    3    5
    
    m[apply(m, 1, Compose(is.finite, all)),]
    ##      [,1] [,2]
    ## [1,]    2    4
    ## [2,]    3    5

    Nota: Compose(is.finite, all) es equivalente a function(x) all(is.finite(x))

    Para establecer los valores a 0, el uso de la matriz de indexación:

    m[!is.finite(m)] <- 0
    m
    ##      [,1] [,2]
    ## [1,]    1    0
    ## [2,]    2    4
    ## [3,]    3    5
    Todavía veo -Inf valores
    Que no funciona para Inf. Usted necesita is.finite.
    Oh, lo siento, perdí la Inf.
    Componer(es.finito, todo) parece que ha funcionado! Gracias
    Sugerencia: usar m[apply(m, 1, Compose(is.finite, all)), , drop=FALSE] para evitar la pérdida de las dimensiones.

    OriginalEl autor Matthew Lundberg

  3. 9

    NaRV.omitir(x) es mi opción preferida para la pregunta 1. Mnemónico NaRV significa «no es un valor regular».

    require(IDPmisc)
    m <- matrix(c(1,2,3,NA,5, NaN, 7, 8, 9, Inf, 11, 12, -Inf, 14, 15), 5)
    > m
         [,1] [,2] [,3]
    [1,]    1  NaN   11
    [2,]    2    7   12
    [3,]    3    8 -Inf
    [4,]   NA    9   14
    [5,]    5  Inf   15
    > NaRV.omit(m)
         [,1] [,2] [,3]
    [1,]    2    7   12
    attr(,"na.action")
    [1] 1 3 4 5
    attr(,"class")
    [1] "omit"
    gran oferta! exactamente lo que necesito!

    OriginalEl autor BruceSpencer.Ca

  4. 3

    Sólo otra manera (para la primera pregunta):

    m <- structure(c(1, 2, 3, NA, 4, 5, Inf, 5, 6, NaN, 7, 8), 
                  .Dim = c(4L, 3L))
    #      [,1] [,2] [,3]
    # [1,]    1    4    6
    # [2,]    2    5  NaN
    # [3,]    3  Inf    7
    # [4,]   NA    5    8
    
    m[complete.cases(m * 0), , drop=FALSE]
    #      [,1] [,2] [,3]
    # [1,]    1    4    6

    No puedo pensar en otra cosa que no sea el de Mateo respuesta para la segunda parte.

    OriginalEl autor Arun

Dejar respuesta

Please enter your comment!
Please enter your name here