2010-05-18 9 views
36

Estoy usando R y necesito seleccionar las filas con edad (edad de la muerte) menor o igual a laclen (duración de la lactancia). Intento crear un nuevo marco de datos para incluir solo filas/identificadores, por lo que el valor de column'aged 'es menor que su valor correspondiente de' laclength '.seleccione solo las filas si su valor en una columna en particular es menor que su valor en la otra columna

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 

la nueva trama de datos debe tener este aspecto:

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

Cualquier ayuda se agradece!

Bazon

+0

Por favor, dar más detalles sobre su necesidad. – Karthik

+0

no consiguiendo nada –

+1

Hola Karthik, Estoy tratando de crear un nuevo marco de datos para incluir solo filas/identificadores por el cual el valor de column'aged 'es menor que el valor de la columna' laclength ' – Bazon

Respuesta

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

debe hacer el truco. Los corchetes le permiten indexar en función de una expresión lógica.

+0

gracias, aL3xa! Mantendré este también. Puedo ver que es muy similar a un wkmor1 enviado antes. – Bazon

+1

@ aL3xa 'attach' without' detach' podría ser peligroso ... Y creo que esa coma está fuera de lugar. – Marek

+1

@Marek, gracias por las sugerencias! He agregado 'detach' y coloqué una coma después del corchete derecho, así que dice así:' attach (df); newdf <- df [que (edad <= laclen),]; detach (df) ' – aL3xa

38

También se puede hacer

subset(df, aged <= laclen) 
+1

nice one, hace que el código sea más ordenado según mi criterio, lástima 'R CMD check' no reconoce los campos utilizados en la prueba como variables legítimas. emite un 'NOTE'" no vinculante visible para la variable global ". – mariotomo

+2

'subconjunto()' tiene algunos problemas graves, consulte p. Ej. http://stackoverflow.com/questions/9860090/in-r-why-is-better-than-subset – MERose

3

Si utiliza dplyr paquete que puede hacer:

library(dplyr) 
filter(df, aged <= laclen) 
Cuestiones relacionadas