2012-08-23 19 views
6

Sto tentando di filtrare i frame di dati che hanno solo una colonna. Questo si traduce in un vettore da restituire in questo modo:Filtraggio dei frame di dati a colonna singola

single.c <- data.frame(col1=c(1,2,3,4,5), row.names=C("r1","r2","r3","r4","r5")) 
single.c[single.c$col1 > 2,] 

[1] 3 4 5 

Quello che realmente voglio è i dati restituiti come lo è per dataframes più colonne:

multi.c <- data.frame(col1=c(1,2,3,4,5), col2=c(1,2,3,4,5), row.names=c("r1","r2","r3","r4","r5")) 
multi.c[multi.c$col2 > 2,] 

    col1 col2 
r3 3 3 
r4 4 4 
r5 5 5 

posso vedere ha senso per restituire un vector se non ci sono altre colonne, ma in generale voglio vedere quali righe hanno dato anche quel risultato. Perché questo accade e c'è un modo semplice per mantenere la forma del frame di dati nel risultato, inclusi i nomi dei giocatori?

risposta

10

utilizzare l'argomento drop alle selezionare le funzioni:

single.c[single.c$col1 > 2, ,drop=F] 

# col1 
#r3 3 
#r4 4 
#r5 5 

Dalla documentazione per [:

goccia

Per matrici e gli array. Se TRUE il risultato è forzato alla dimensione più bassa possibile di (vedere gli esempi). Funziona solo per l'estrazione di elementi , non per la sostituzione. Vedi drop per ulteriori dettagli.

+3

Grazie, non avevo idea che ci fosse la documentazione elencata in '? '[''! – MattLBeck

+2

Grandi cose! Mi sono sempre chiesto come ottenere un data.frame estraendo una singola colonna da un data.frame esistente! Sto usando data.frame (col1 = multi.col $ col1, row.names = rownames (multi.col)) per fare la stessa cosa! Doh! –

Problemi correlati