Estrarre un sottoinsieme di una dataframe base a una condizione che coinvolge un campo

StackOverflow https://stackoverflow.com/questions/3445590

  •  27-09-2019
  •  | 
  •  

Domanda

Ho una grande CSV con i risultati di un sondaggio medica da luoghi diversi (la posizione è un fattore presente nei dati). Come alcune analisi sono specifici per una posizione e per comodità, vorrei estrarre telai ausiliari con le righe solo da quelle posizioni. Succede che la posizione è il primo campo in modo sì, ho potuto farlo di classificare le file CSV, ma mi piacerebbe imparare a farlo in R come sono sicuro che avrò bisogno di questo per altre colonne.

Quindi, in poche parole, la domanda è:? Dato un foo frame di dati, come posso creare un altro bar frame di dati che contiene solo le righe da foo dove foo$location = 'there'

È stato utile?

Soluzione

Qui ci sono i due approcci principali. Io preferisco questo uno per la sua leggibilità:

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

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

Il secondo è l'approccio di indicizzazione. Puoi righe di indice in R sia con numerico o fette booleani. foo$location == "there" restituisce un vettore di valori T e F che è la stessa lunghezza delle file di foo. Si può fare questo per restituire solo le righe in cui la condizione restituisce true.

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

Altri suggerimenti

Solo per estendere la risposta di cui sopra è anche possibile indicizzare le colonne piuttosto che specificare i nomi delle colonne che possono anche essere utili a seconda di quello che stai facendo. Dato che la vostra posizione è il primo campo che sarebbe simile a questa:

    bar <- foo[foo[ ,1] == "there", ]

Questo è utile perché è possibile eseguire operazioni sul valore di colonna, come in loop su specifiche colonne (e si può fare lo stesso con i numeri di riga di indicizzazione troppo).

Questo è utile anche se è necessario eseguire alcune operazioni su più di una colonna, perché è possibile specificare un intervallo di colonne:

    foo[foo[ ,c(1:N)], ]

o specifici colonne, come ci si aspetterebbe.

    foo[foo[ ,c(1,5,9)], ]
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top