Mam problem z analizą R.
Mam ramkę danych taką jak ta:
Name | Group | Count
Person 1 | A | 3
Person 2 | A | 1
Person 3 | A | 0
Person 1 | B | 5
Person 2 | B | 0
Person 3 | B | 1
Person 1 | C | 1
i musiałbym go „rozwinąć” (nie jestem pewien, czy właściwy termin), aby wyglądał tak:
Person 1 | A
Person 1 | A
Person 1 | A
Person 2 | A
Person 1 | B
Person 1 | B
itp.
Więc bierze wartość pary Osoba 1 i A (w tym przykładzie 3) i tworzy trzy rzędy z Osobą 1 i A i robi to dla każdej Osoby - Kombinacja Grupy. Nie mogę znaleźć dobrych słów do wyszukiwania online.
reshape()
funkcjęreshape2
pakiet w R. Może to również pomóc wdput
2 przykładowych ramkach danych: jednym z danymi wejściowymi i drugim z danymi wyjściowymi.Odpowiedzi:
Chociaż jest to bardzo przydatny pakiet, myślę, że zmiana kształtu jest w tym przypadku nadmierna, rep może wykonać zadanie.
Oto kilka przykładowych danych:
Teraz, aby go „rozwinąć”:
Nie mogłem znaleźć sposobu, aby pracować bezpośrednio nad ramką danych u góry głowy, więc pracuję nad każdą zmienną osobno, a następnie ponownie ją zestawiam, co jest trochę brzydkie, ale powinno być OK, o ile zawsze zajmiesz się używaniem ta sama zmienna dla zliczeń.
źródło
df[rep(seq_len(nrow(df)), df$count), 1:2]
:?Możesz użyć funkcji unable z pakietu przekształcania.
Biorąc pod uwagę powyższe df (autor: Gaël Laurans)
źródło
untable
robi dokładnie to, o czym wspomniałem w komentarzu :-) Dzięki za przypomnienie mi o tej funkcji!I
uncount
odtidyr
teraz daje taki sam wynik jak powyżej.źródło