Mam ramkę danych z miesięcznych danych przez 100 lat (1200 punktów danych) z miesiącami w kolumnach i latach w wierszach. Chcę przekonwertować go na szereg miesięcznych szeregów czasowych i próbowałem na kilka sposobów, z których żaden nie tworzy prawidłowej struktury "czasowej".Konwersja ramki danych do miesięcznych szeregów czasowych
Problem dotyczy R biorąc pod uwagę ramkę danych jako 100 obserwacji (lat) 12 zmiennych (miesięcy). Oto kod powtarzalne dla mojej ostatniej próbie:
set.seed(12)
dummy.df <- as.data.frame(matrix(round(rnorm(1200),digits=2),nrow=100,ncol=12))
rownames(dummy.df) <- seq(from=1901, to=2000)
colnames(dummy.df) <- c("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec")
dummy.df.ts <- ts(as.vector(as.matrix(dummy.df)), start=c(1901,1), end=c(2000,12), frequency=12)
W „dummy.df.ts” obiektu, wiersze i kolumny są włączane i zamiast kolejnych obserwacji w kolumnach, wszyscy februarys januarys etc są ułożone razem jedna po drugiej. Jak mogę dostać się do właściwej struktury czasowej?
Przykładem moich danych: są miesięczne wartości temperatury od 1901 - 1905
fr.monthly.temp.sample
JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC
1901 2.7 0.4 4.7 10.0 13.0 16.9 19.2 18.3 15.7 10.6 4.9 3.5
1902 4.1 3.2 7.5 10.3 10.0 15.1 18.2 17.4 15.0 10.2 6.3 3.5
1903 3.8 5.9 7.6 7.1 12.9 14.9 17.6 17.3 15.5 12.1 6.9 2.7
1904 3.0 4.6 5.5 10.3 13.6 16.3 20.2 18.5 13.9 11.2 5.4 4.8
1905 1.7 4.0 7.4 9.3 11.9 16.5 20.0 17.6 14.7 8.4 5.5 3.8
I za pomocą tego ts() połączenia:
fr.monthly.temp.sample.ts <- ts(as.vector(as.matrix(fr.monthly.temp.sample)), start=c(1901,1), end=c(1905,12), frequency=12)
to jest wyjście otrzymuję dla obiektu szeregów czasowych:
fr.monthly.temp.sample.ts
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1901 2.7 4.1 3.8 3.0 1.7 0.4 3.2 5.9 4.6 4.0 4.7 7.5
1902 7.6 5.5 7.4 10.0 10.3 7.1 10.3 9.3 13.0 10.0 12.9 13.6
1903 11.9 16.9 15.1 14.9 16.3 16.5 19.2 18.2 17.6 20.2 20.0 18.3
1904 17.4 17.3 18.5 17.6 15.7 15.0 15.5 13.9 14.7 10.6 10.2 12.1
1905 11.2 8.4 4.9 6.3 6.9 5.4 5.5 3.5 3.5 2.7 4.8 3.8
--Note zmienionej struktury czasowej (wartości z kolumn są teraz w wierszach ..) -
Dzięki.
Edytowałem swoją odpowiedź. Nie doświadczam tego "przełączania" między kolumnami i wierszami danych wyświetlanych przez 'plot'.Prawdopodobnie możesz uzyskać lepsze odpowiedzi, korzystając z próbki danych, zaledwie kilka lat, i publikując otrzymany wykres. – Michele
Dodałem moje oryginalne dane i wykresy, aby pokazać niewłaściwe uporządkowanie wartości. Twoje rozwiązanie EDIT 1 daje mi wielowariantowe szeregi czasowe, które nie są tym, czego chcę, chcę zachować je jako jednowymiarową serię do dalszego przetwarzania. Podobnie jak EDIT 2, próbowałem as.vector() z tego samego powodu, ale to to operacja, która powoduje problem z zamówieniem. być może rozwiązanie # 1 opublikowane przez @Alexander zadziała, nadal muszę to wypróbować. – avg
Moja edycja 1 nie była rozwiązaniem ... miała tylko uświadomić, jak działa ts(). Moja edycja 2 zaczęła się od danych JUŻ w wektorze ... Nie zdawałem sobie sprawy, że potrzebujesz tylko transpozycji ... rundy (seq (5,10, length.out = 24), 1) 'to wektor . – Michele