Możesz mieć dane w formacie szerokim lub długim. Jest to dość ważna rzecz, ponieważ możliwe do zastosowania metody różnią się w zależności od formatu. Wiem, że musisz pracować z pakietem przekształcania melt()
i cast()
z niego, ale wydaje się, że niektóre rzeczy nie dostaję.
Czy ktoś może dać mi krótki przegląd tego, jak to robisz?
data-transformation
r
Mina
źródło
źródło
melt
icast
. Tam konwersja z formatu szerokiego na długi odbywa się na jednym etapie. Naprawdę nie ma nic bardziej wyjątkowego.Odpowiedzi:
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:
Zauważamy, że dane są w szerokiej formie. Aby przejść do długiej formy, stopiamy
smiths
ramkę danych :Zauważ, jak
melt()
wybraliśmy jedną ze zmiennych jako id, ale możemy jednoznacznie określić, których użyć za pomocą argumentu'id'
:Oto kolejny przykład
?cast
:Jeśli przechowujemy stopioną ramkę danych, możemy rzutować na inne formy. W nowej wersji
reshape
(wywoływanejreshape2
) są funkcjeacast()
idcast()
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:Istnieje naprawdę tylko dwie główne funkcje
reshape2
:melt()
aacast()
idcast()
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.źródło
dcast(aqm, month ~ variable)
, co by to zrobił bez funkcji agregującej??dcast
co by ci to powiedział (zobacz szczegóły argumentufun.aggregate
).Quick-R ma prosty przykład użycia pakietu zmiany kształtu
Zobacz także
?reshape
( LINK ), w jaki sposób można przechodzić między formatem szerokim a długim.źródło
Nie musisz używać
melt
icast
.Przekształcanie danych można wykonać na wiele sposobów. W twoim konkretnym przykładzie użycie cytowania za pomocą
recast
zaggregate
było zbędne, ponieważaggregate
samo zadanie działa dobrze.Podoba mi się, jak w swoim blogu wyjaśniasz, co
melt
się dzieje. Bardzo niewiele osób to rozumie, a kiedy to zobaczysz, łatwiej będzie zobaczyć, jakcast
działa i jak możesz pisać własne funkcje, jeśli chcesz.źródło
Zobacz wiki reshape2 . Zapewnia z pewnością więcej przykładów, jak można się spodziewać.
źródło
Zauważyłem, że nie ma tu odniesienia do bardziej wydajnych i rozbudowanych metod przekształcania
data.table
, dlatego bez dalszego komentarza zamieszczam doskonałą odpowiedź Zach / Arun na StackOverflow na podobne pytanie:https://stackoverflow.com/questions/6902087/proper-fastest-way-to-reshape-a-data-table/6913151#6913151
W szczególności na stronie
data.table
GitHub znajduje się wspaniała winieta :https://github.com/Rdatatable/data.table/wiki/Getting-started
źródło