2011-08-17 15 views
7

Ho un dataframe come x, dove i geni della colonna sono un fattore. Voglio rimuovere tutte le righe in cui i geni della colonna non hanno nulla. Quindi nella tabella X voglio rimuovere la riga 4. C'è un modo per farlo per un grande dataframe?Rimuovi righe in dataframe con fattore ""

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 

Infine Risultato:

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

Grazie a tutti!

risposta

22

Non è del tutto evidente dalla tua domanda quali sono i valori vuoti sono, ma si dovrebbe essere in grado di adottare la soluzione qui di seguito (qui suppongo i valori 'vuote' sono stringhe vuote):

toBeRemoved<-which(X$genes=="") 
X<-X[-toBeRemoved,] 
+0

Questo è esattamente wat mi serviva! grazie Nick Sabbe! – Lisann

+2

Penso che probabilmente vorrai un 'droplevels()' per eliminare il '" "* livello *:' droplevels (X [-toBeRemoved,]) ' –

+4

In alternativa, puoi fare' sottoinsieme (X, geni ! = "") ' – nullglob

10

@ Nick Sabbe ha fornito un'ottima risposta, ma ha un avvertimento:

L'utilizzo di -which(...) è un trucco perfetto per (a volte) velocizzare l'operazione di subsetting quando sono presenti solo alcuni elementi da rimuovere.

... Ma se ci sono nessun elemento da rimuovere, non funziona!

Quindi, se X$genesnon contiene alcun stringhe vuote, which restituirà un vettore intero vuota. Negare è ancora un vettore vuoto. E X [integer (0)] restituisce un data.frame vuoto!

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

Oppure, se il guadagno di velocità non è importante, semplicemente:

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

O, come ha sottolineato @nullglob,

subset(X, genes != "") 
+0

Avviso eccellente. Potrebbe anche essere 'if (length (toBeRemoved)) {'. Ulteriore osservazione: l'uso di 'subset' rimuove anche tutte le righe in cui' is.na (X $ geni) 'è VERO. –

Problemi correlati