2010-08-10 13 views
40

Tengo un gran CSV con los resultados de una encuesta médica desde diferentes lugares (la ubicación es un factor presente en los datos). Como algunos análisis son específicos de una ubicación y, por comodidad, me gustaría extraer subtramas con las filas solo de esas ubicaciones. Sucede que la ubicación es el primer campo, así que sí, podría hacerlo ordenando las filas de CSV, pero me gustaría aprender cómo hacerlo en R, ya que estoy seguro de que lo necesitaré para otras columnas.cómo extraer un subconjunto de un marco de datos basado en una condición que involucra un campo?

Entonces, en pocas palabras, la pregunta es: dado un marco de datos foo, ¿cómo puedo crear otra barra de marco de datos que solo contenga las filas de foo donde foo $ location = 'there'?

Muchas gracias.

Respuesta

72

Aquí están los dos enfoques principales. Yo prefiero éste para su legibilidad:

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

Observe que puede encadenar muchos condicionales con & y | para crear subconjuntos complejos.

El segundo es el enfoque de indexación. Puede indexar filas en R con porciones numéricas o booleanas. foo$location == "there" devuelve un vector de T y F valores que tienen la misma longitud que las filas de foo. Puede hacer esto para devolver únicamente las filas donde la condición devuelve verdadero.

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

. @ JoFrhwld - Is not 'subset()' ¿método no preferido? Discusión detallada [aquí] (https://stackoverflow.com/questions/9860090/why-is-better-than-subset) –

+0

¿Hay una manera simple de acceder tanto al subconjunto como al foo menos el subconjunto? Quiero dividir mis datos en barras y (foo-bar). Obviamente, podría repetir lo anterior con! =, Pero ¿hay un camino de una sola línea? – schoon

Cuestiones relacionadas