2010-05-18 15 views
36

Sto usando R e ho bisogno di selezionare le righe con età (età del decesso) inferiore o uguale a laclen (lunghezza dell'allattamento). Sto cercando di creare un nuovo frame di dati per includere solo righe/id in cui il valore di column'aged 'è inferiore al suo valore' laclength 'corrispondente.seleziona solo le righe se il suo valore in una particolare colonna è inferiore al suo valore nell'altra colonna

df: 
id1 id2 laclen aged 
9830 64526 26  6 
7609 64547 28  0 
9925 64551  3  0 
9922 64551  3  5 
9916 64551  3  8 
9917 64551  3  8 
9914 64551  3  2 

il nuovo telaio di dati dovrebbe essere simile a questo:

dfnew: 
id1 id2 laclen aged 
9830 64526 26  6 
7609 64547 28  0 
9925 64551  3  0 
9914 64551  3  2 

Qualsiasi aiuto sarebbe apprezzato!

Bazon

+0

si prega di fornire ulteriori dettagli circa la vostra esigenza. – Karthik

+0

non ti per niente –

+1

Ciao Karthik, Sto cercando di creare un nuovo frame di dati per includere solo righe/id in cui il valore di column'aged 'è inferiore al valore della colonna' laclength ' – Bazon

risposta

63
df[df$aged <= df$laclen, ] 

dovrebbe fare il trucco. Le parentesi quadre ti consentono di indicizzare in base a un'espressione logica.

+0

grazie, aL3xa! Terrò anche questo. Vedo che è molto simile a un wkmor1 inviato in precedenza. – Bazon

+1

@ aL3xa 'attach' senza' detach' potrebbe essere pericoloso ... E penso che la virgola sia fuori posto. – Marek

+1

@Marek, grazie per i suggerimenti! Ho aggiunto 'detach' e ho inserito una virgola dopo la parentesi destra, quindi è come segue:' attach (df); newdf <- df [che (invecchiato <= laclen),]; detach (df) ' – aL3xa

38

Si può anche fare

subset(df, aged <= laclen) 
+1

nice one, rende il codice più corretto secondo me, peccato 'R CMD check' non riconosce i campi utilizzati nel test come variabili legittime. emette un "NOTE" "nessun legame visibile per la variabile globale". – mariotomo

+2

'subset()' ha alcuni problemi seri, vedi per es. http://stackoverflow.com/questions/9860090/in-r-why-is-better-than-subset – MERose

3

Se si utilizza dplyr pacchetto si può fare:

library(dplyr) 
filter(df, aged <= laclen) 
Problemi correlati