2010-08-10 13 views
40

Ho un CSV di grandi dimensioni con i risultati di un sondaggio medico da diverse località (la posizione è un fattore presente nei dati). Poiché alcune analisi sono specifiche per una posizione e per comodità, vorrei estrarre i sottoframe con le righe solo da quelle posizioni. Succede che la posizione è il primo campo quindi sì, potrei farlo ordinando le righe CSV, ma mi piacerebbe imparare come farlo in R come sono sicuro che avrò bisogno di questo per altre colonne.come estrarre un sottoinsieme di un frame di dati in base a una condizione che coinvolge un campo?

Quindi, in poche parole, la domanda è: dato un data frame foo, come posso creare un'altra barra del frame di dati che contiene solo le righe da foo dove foo $ location = 'there'?

Grazie mille.

risposta

72

Ecco i due approcci principali. Io preferisco questo uno per la sua leggibilità:

bar <- subset(foo, location == "there") 

noti che è possibile stringa insieme molti condizionali con & e | per creare sottoinsiemi complessi.

Il secondo è l'approccio di indicizzazione. Puoi indicizzare le righe in R con sezioni numeriche o booleane. foo$location == "there" restituisce un vettore di valori T e F della stessa lunghezza delle righe di foo. È possibile eseguire questa operazione per restituire solo le righe in cui la condizione restituisce true.

foo[foo$location == "there", ] 
+0

. @ JoFrhwld - Is not 'subset()' metodo non preferito? Discussione dettagliata [qui] (https://stackoverflow.com/questions/9860090/why-is-better-than-subset) –

+0

Esiste un modo semplice per accedere a sottoinsieme e foo meno il sottoinsieme? Voglio dividere i miei dati in bar e (foo-bar). Ovviamente, potrei ripetere quanto sopra con! =, Ma esiste un modo unilaterale? – schoon

Problemi correlati