Na stronie internetowej Hadleya Wickhama znajduje się kilka zasobów (obecnie nazywanych reshape2
), w tym link do artykułu na temat pakietu w Journal of Statistics Software.
Oto krótki przykład z pracy:
> require(reshape2)
Loading required package: reshape2
> data(smiths)
> smiths
subject time age weight height
1 John Smith 1 33 90 1.87
2 Mary Smith 1 NA NA 1.54
Zauważamy, że dane są w szerokiej formie. Aby przejść do długiej formy, stopiamysmiths
ramkę danych :
> melt(smiths)
Using subject as id variables
subject variable value
1 John Smith time 1.00
2 Mary Smith time 1.00
3 John Smith age 33.00
4 Mary Smith age NA
5 John Smith weight 90.00
6 Mary Smith weight NA
7 John Smith height 1.87
8 Mary Smith height 1.54
Zauważ, jak melt()
wybraliśmy jedną ze zmiennych jako id, ale możemy jednoznacznie określić, których użyć za pomocą argumentu 'id'
:
> melt(smiths, id = "subject")
subject variable value
1 John Smith time 1.00
2 Mary Smith time 1.00
3 John Smith age 33.00
4 Mary Smith age NA
5 John Smith weight 90.00
6 Mary Smith weight NA
7 John Smith height 1.87
8 Mary Smith height 1.54
Oto kolejny przykład ?cast
:
#Air quality example
names(airquality) <- tolower(names(airquality))
aqm <- melt(airquality, id=c("month", "day"), na.rm=TRUE)
Jeśli przechowujemy stopioną ramkę danych, możemy rzutować na inne formy. W nowej wersji reshape
(wywoływanej reshape2
) są funkcje acast()
i dcast()
zwracające odpowiednio wynik tablicowy (tablica, macierz, wektor) lub ramkę danych. Funkcje te przyjmują również funkcję agregującą (np. mean()
) W celu zapewnienia podsumowań danych w postaci stopionej. Na przykład, w oparciu o powyższy przykład jakości powietrza, możemy generować, w szerokiej formie, średnie miesięczne wartości dla zmiennych w zbiorze danych:
> dcast(aqm, month ~ variable, mean)
month ozone solar.r wind temp
1 5 23.61538 181.2963 11.622581 65.54839
2 6 29.44444 190.1667 10.266667 79.10000
3 7 59.11538 216.4839 8.941935 83.90323
4 8 59.96154 171.8571 8.793548 83.96774
5 9 31.44828 167.4333 10.180000 76.90000
Istnieje naprawdę tylko dwie główne funkcje reshape2
: melt()
a acast()
i dcast()
parowanie. Spójrz na przykłady na stronach pomocy dla tych dwóch funkcji, zobacz stronę internetową Hadleya (link powyżej) i spójrz na artykuł, o którym wspomniałem. To powinno ci na początek wystarczyć.
Możesz także zajrzeć do plyr
pakietu Hadleya, który robi podobne rzeczy, reshape2
ale został zaprojektowany, aby zrobić o wiele więcej.