2012-10-11 16 views
5

Jestem nowy dla R i ggplot2. Mam plik csv z danymi o zużyciu napojów. Pierwsza kolumna to Rok, a następne 9 kolumn to rodzaje napojów, takie jak kawa, herbata, napoje gazowane itd., Z wartościami zużycia w wartości rocznej tego rzędu. Dane obejmują 41-letni okres. Badałem to i próbowałem wielu rzeczy. Mogę łatwo stworzyć wykres punktowy dla dowolnego rodzaju napoju z ggplotem.Restrukturyzacja danych csv dla r i ggplot2

Jednak chcę utworzyć poziome skumulowane wykresy punktowe z Rokiem na osi X dla każdego wykresu. Więc będzie spisek na kawę, a potem tuż pod nią, na herbatę itp. Myślę, że chcę użyć faset. Myślę też, że chcę, aby moje dane zostały zrestrukturyzowane, aby zawierały 3 kolumny: jedną na rok, jedną dla "kategorii" (np. Kawy, herbaty, napoju gazowanego itp.), A ostatnią dla wartości. Uważam, że gdy otrzymam dane w tej formie, użycie faceting powinno być proste.

Problem polega na tym, że nie mogę wymyślić, jak uzyskać moje dane w tej formie. Oto, jak wyglądają pierwsze wiersze danych:

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 

Czy ktoś może mi pomóc?

dput danych jest:

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 jest dla mnie nowy. Po prostu podniosłem wzrok i spróbowałem go użyć, ale nie rozumiem. Mam plik, powiedzmy, "myTestFile.csv". Próbowałem: dput (x, file = 'myTestFile.csv') i otrzymałem komunikat o błędzie. Nie ręcznie wpisałeś wszystkich danych, prawda? Czy możesz mi pomóc zrozumieć, co zrobiłeś i jak używać dput z plikiem csv? – user1739283

+0

Jeśli masz zmienną, x, możesz dput (x) i dostarczy ci sposobu na łatwe przeniesienie x do innej zmiennej. Wypróbuj go w R, skopiuj i wklej "structure (list ....", następnie wpisz 'x <- PASTE' następnie' str (x) '. –

Odpowiedz

6

mam trochę powiedzenie, że używam często do ggplot2 „W razie wątpliwości, stopić”. W pakiecie przekształcania jest funkcja melt(), która robi dokładnie to.

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 dla" kiedy masz wątpliwości, stop "co jest moim doświadczeniem – SlowLearner