2012-10-11 18 views
5

Soy nuevo en R y ggplot2. Tengo un archivo csv con datos de consumo de bebidas. La primera columna es el año, y luego las siguientes 9 columnas son tipos de bebidas como café, té, refrescos, etc., con valores para el monto de consumo para el valor anual de esa fila. Los datos cubren un período de 41 años. He estado investigando esto y probando muchas cosas. Puedo crear fácilmente un diagrama de puntos para cualquier tipo de bebida con ggplot.Reestructurar datos csv para r y ggplot2

Sin embargo, quiero crear gráficos horizontales de puntos apilados con Year en el eje x para cada gráfica. Entonces, habría una trama para el café, y luego justo debajo, una para el té, etc. Creo que quiero usar facetas. También estoy pensando en que quiero que mi información se reestructure para que tenga 3 columnas: una por año, una por "categoría" (es decir, café, té, refrescos, etc.) y la última por el valor. Mi pensamiento es que una vez que obtenga los datos en esa forma, el uso de facetado debería ser sencillo.

El problema es que parece que no entiendo cómo obtener mis datos de esa forma. Así es como se ven las primeras filas de los datos:

Year Whole Milk Other Milk Total Milk Tea Coffee Diet Soda Regular Soda Total Soda Juice 
1970 25.5 5.8 31.3 6.8 33.4 2.1 22.2 24.3 5.5 
1971 25 6.3 31.3 7.2 32.2 2.2 23.3 25.5 5.8 
1972 24.1 6.9 31 7.3 33.6 2.3 23.9 26.2 6 

¿Alguien me puede ayudar?

dput de los datos es:

structure(list(Year = 1970:1972, `Whole Milk` = c(25.5, 25, 24.1 
), `Other Milk` = c(5.8, 6.3, 6.9), `Total Milk` = c(31.3, 31.3, 
31), Tea = c(6.8, 7.2, 7.3), Coffee = c(33.4, 32.2, 33.6), `Diet Soda` = c(2.1, 
2.2, 2.3), `Regular Soda` = c(22.2, 23.3, 23.9), `Total Soda` = c(24.3, 
25.5, 26.2), Juice = c(5.5, 5.8, 6)), .Names = c("Year", "Whole Milk", 
"Other Milk", "Total Milk", "Tea", "Coffee", "Diet Soda", "Regular Soda", 
"Total Soda", "Juice"), class = "data.frame", row.names = c(NA, 
-3L)) 
+0

dput es nuevo para mí. Lo busqué e intenté usarlo, pero no lo estoy obteniendo. Tengo un archivo, por ejemplo, 'myTestFile.csv'. Intenté: dput (x, file = 'myTestFile.csv'), y recibí un mensaje de error. No escribiste manualmente todos los datos, ¿verdad? ¿Puede ayudarme a entender lo que hizo y cómo usaría dput con un archivo csv? – user1739283

+0

Si tiene una variable, x, puede aplicar dput (x) y le proporcionará una forma de transportar x a otra variable fácilmente. Pruébalo en R, copia y pega 'structure (list .... 'luego escribe' x <- PASTE' luego 'str (x)'. –

Respuesta

6

Tengo un poco diciendo que utilizo a menudo para ggplot2, "En caso de duda, se funden". En el paquete de remodelación hay una función derretir(), que hace exactamente esto.

tmp <- structure(list(Year = 1970:1972, `Whole Milk` = c(25.5, 25, 24.1 
), `Other Milk` = c(5.8, 6.3, 6.9), `Total Milk` = c(31.3, 31.3, 
31), Tea = c(6.8, 7.2, 7.3), Coffee = c(33.4, 32.2, 33.6), `Diet Soda` = c(2.1, 
2.2, 2.3), `Regular Soda` = c(22.2, 23.3, 23.9), `Total Soda` = c(24.3, 
25.5, 26.2), Juice = c(5.5, 5.8, 6)), .Names = c("Year", "Whole Milk", 
"Other Milk", "Total Milk", "Tea", "Coffee", "Diet Soda", "Regular Soda", 
"Total Soda", "Juice"), class = "data.frame", row.names = c(NA, 
-3L)) 

library(reshape) 

melt(tmp, id.vars="Year") 

Year  variable value 
1 1970 Whole Milk 25.5 
2 1971 Whole Milk 25.0 
3 1972 Whole Milk 24.1 
4 1970 Other Milk 5.8 
5 1971 Other Milk 6.3 
6 1972 Other Milk 6.9 
7 1970 Total Milk 31.3 
8 1971 Total Milk 31.3 
9 1972 Total Milk 31.0 
10 1970   Tea 6.8 
11 1971   Tea 7.2 
12 1972   Tea 7.3 
13 1970  Coffee 33.4 
... 
+1

+1 para "when in doubt melt", que es mi experiencia también – SlowLearner

Cuestiones relacionadas