2011-09-11 20 views
69

Estoy trabajando con el conjunto de datos LearnBayes. Para aquellos que quieren ver los datos reales:Filtrar una trama de datos por valores en una columna

install.packages('LearnBayes') 

Estoy tratando de filtrar filas basándose en el valor de las columnas. Por ejemplo, si el valor de la columna es "agua", entonces quiero esa fila. Si el valor de la columna es "leche", entonces no lo quiero. En definitiva, estoy tratando de filtrar a todos los individuos cuya columna de bebida es "agua".

+2

tratar de leer '? '['' 'Y luego leer? Subset'. – joran

+0

Gracias por los consejos. Consejo definitivamente útil y espero usarlo en el futuro. – user722224

+4

Le sugiero que lea los muy buenos manuales de R: http://cran.r-project.org/doc/manuals/R-intro.html – Andrie

Respuesta

51

Prueba esto:

subset(studentdata, Drink=='water') 

que debe hacerlo.

+0

¡Gracias! Intenté alguna variación de eso, pero debí haber estado apagado en la puntuación o algo así de tonto. Aprecio la ayuda. – user722224

155

El comando de subconjunto no es necesario. Sólo tiene que utilizar los datos del marco de indexación

studentdata[studentdata$Drink == 'water',] 

Lea la advertencia de ?subset

Ésta es una función de conveniencia destinado a ser utilizado de forma interactiva. Para la programación es mejor utilizar las funciones de subconjunto estándar como '[', y en particular la evaluación no estándar del argumento 'subconjunto' puede tener consecuencias imprevistas.

Pensamiento
+0

¡Gracias, amigo! –

+2

Gracias @adamleerich. Por curiosidad, ¿cuál es el razonamiento detrás de la coma? – ThinkBonobo

+3

La sintaxis '[]' se indexa en el marco de datos bidimensional de la forma normal en que las matrices están indexadas en matemática: fila y columna, separadas por una coma. En este caso, estamos pasando un vector de índices de filas ('studentData $ Drink == 'water'' selecciona las filas que nos interesan), pero dado que no queremos restringir qué columnas obtenemos para esas filas (queremos todas), dejamos la parte de la columna del par de índices en blanco (por lo que no hay nada después de la coma). Este es el azúcar sintáctico para evitar tener que dar un vector de todos los índices de columnas. – Will

25

me gustaría actualizar esto con una solución dplyr

library(dplyr)  
filter(studentdata, Drink == "water") 
+13

o con las tuberías 'studentdata%>% filter (Drink ==" water ")' –

Cuestiones relacionadas