Mam problemy z przekształceniem zestawu danych panelu z szerokiego na długi format. Zestaw danych wygląda następująco:Zmiana rozmiaru panelu danych na format długi do formatu
ID | KP1_430a | KP1_430b | KP1_430c | KP2_430a | KP2_430b | KP2_430c | KP1_1500a | ...
1 ....
2 ....
KP1; KP2 do KP7 opisują fale. a, b do f opisują konkretną pozycję. (Np. Od lewej do prawej strony umieszczenie strony)
Chciałbym mieć te dane w długim formacie. W ten sposób:
ID | Party | Wave | 430 | 1500
1 1 1 .. ..
1 2 1 .. ..
. . .
1 1 2 .. ..
. . .
2 1 1 .. ..
Próbowałem użyć funkcji zmiany kształtu. Ale miałem problemy z przekształceniem go w czasie i nad stronami jednocześnie.
Oto przykład małego pliku data.frame.
data <- data.frame(matrix(rnorm(10),2,10))
data[,1] <- 1:2
names(data) <- c("ID","KP1_430a" , "KP1_430b" , "KP1_430c" , "KP2_430a" , "KP2_430b ", "KP2_430c ", "KP1_1500a" ,"KP1_1500b", "KP1_1500c")
I to jest, jak daleko się dostałem.
data_long <- reshape(data,varying=list(names(data)[2:4],names(data)[5:7], names(data[8:10]),
v.names=c("KP1_430","KP2_430","KP1_1500"),
direction="long", timevar="Party")
Pozostaje pytanie: w jaki sposób mogę uzyskać zmienne czasowe w długim formacie? Czy istnieje bardziej elegancki sposób na przekształcenie tych danych? W powyższym kodzie musiałbym wpisać nazwy (nazwy (dane) [2: 4]) dla każdej fali i zmiennej. W tym małym pliku data.frame jest OK, ale zbiór danych jest dużo większy.
EDYCJA: W jaki sposób można wykonać tę transformację ręcznie: faktycznie zrobiłem to, co pozostawiło mi plik długich stron.
Najpierw należy powiązać KP1_430a i KP1_1500a z identyfikatorami, czasem = 1 i stroną = 1 kolumną. Po drugie utwórz ten sam obiekt dla wszystkich stron [b-f], zmieniając odpowiednio indeks partyjny i dodaj go wierszowo. Wykonaj krok pierwszy i drugi dla pozostałych fal [2-7], odpowiednio zmieniając partię i czas var, i dołączaj je w rzędzie.
Jeśli chcesz osobne kolumny dla 430 i 1500 w długim formacie, wtedy powinna być równa ilość danych z tych warunków w szerokim. W jaki sposób to zrobisz, będziesz miał dużo NA w 1500 kolumnie ... czy chciałeś tego w ten sposób? – John
Och, to chyba wszystko trochę szkicowe. Występuje jednakowa liczba fal (1-7) i elementów partii (a-f) dla tych dwóch zmiennych. A więc: KP [1-7] _430 [a-f], KP [1-7] _1500 [a-f]. – lstoetze
Jednak dla niektórych zmiennych w zestawie danych istnieje (a) tylko dane dla niektórych fal - np. KP [146] _1640 [a-f] lub (b) niezwiązane ze stroną - np. KP [1-7] _1490. – lstoetze