Tengo un dataframe como x donde la columna de los genes es un factor. Quiero eliminar todas las filas en la columna de genes no tiene nada. Así, en la tabla X quiero quitar la fila 4. Es allí una manera de hacer esto para un gran dataframe?

X 
names   values   genes
1 A  0.2876113  EEF1A1 
2 B  0.6681894   GAPDH
3 C  0.1375420 SLC35E2
4 D -1.9063386        
5 E -0.4949905   RPS28

Finalmente el resultado:

X 
names   values   genes
1 A  0.2876113  EEF1A1 
2 B  0.6681894   GAPDH
3 C  0.1375420 SLC35E2
5 E -0.4949905   RPS28

Muchas gracias a todos!

OriginalEl autor Lisann | 2011-08-17

2 Comentarios

  1. 22

    No es completamente obvio a partir de tu pregunta lo que el vacío son los valores, pero usted debería ser capaz de adoptar la solución más abajo (aquí supongo que el ‘vacío’ los valores son cadenas vacías):

    toBeRemoved<-which(X$genes=="")
    X<-X[-toBeRemoved,]
    Que es exactamente wat necesitaba! gracias Nick Sabbe!
    Creo que usted probablemente querrá una droplevels() a su alrededor para deshacerse de la "" : droplevels(X[-toBeRemoved, ])
    Alternativamente, usted puede hacer subset(X, genes != "")
    Bastante seguro de que no, lo que con el soporte de la confusión 😉 X <- X[-which(X$genes == ""), ]
    IDEs y su sintaxis verificadores de echar a perder un programador, no hay duda. 🙂

    OriginalEl autor Nick Sabbe

  2. 10

    @Nick Sabbe proporcionado una gran respuesta, pero tiene una advertencia:

    Utilizando -which(...) es un truco para que (a veces) acelerar el subconjunto de la operación, cuando sólo hay un par de elementos a eliminar.

    …Pero si hay sin elementos a quitar, que no!

    Por lo tanto, si X$genes no contener cualquier cadenas vacías, which devolverá un vacío entero vector. La negación de que todavía es un vector vacío. Y X[integer(0)] devuelve un vacío de datos.marco!

    toBeRemoved <- which(X$genes=="")
    if (length(toBeRemoved>0)) { # MUST check for 0-length
        X<-X[-toBeRemoved,]
    }

    O, si la ganancia de velocidad no es importante, simplemente:

    X<-X[X$genes!="",]

    O, como @nullglob señaló,

    subset(X, genes != "")
    Excelente advertencia. También podría ser if ( length(toBeRemoved) ) {. Observación: el uso de subset también elimina todas las filas donde is.na(X$genes) es CIERTO.

    OriginalEl autor Tommy

Dejar respuesta

Please enter your comment!
Please enter your name here