R: Лучший способ преобразовать mts в кадр данных не временных рядов с временными индексами - PullRequest
3 голосов
/ 11 февраля 2011

В настоящее время я использую следующий метод для преобразования набора данных mts в кадр данных с временными индексами в виде столбцов. Есть ли более элегантный способ сделать это?

z <- ts(matrix(rnorm(300), 100, 3), start=c(1961, 1), frequency=12)
YM<-cbind(Year=as.numeric(floor(time(z))),Month=as.numeric(cycle(z)))
z<-cbind(as.data.frame(YM),as.data.frame(z))

str(z)

Ответы [ 3 ]

6 голосов
/ 11 февраля 2011

Попробуйте это:

data.frame(Year = c(floor(time(z) + .01)), Month = c(cycle(z)), z)

или

as.data.frame(cbind(Year = floor(time(z) + .01), Month = cycle(z), z))
3 голосов
/ 11 февраля 2011

Вы можете извлечь индекс из ts с помощью index() (из пакета zoo)

zindex <- index(z)
zdf <- data.frame(Year = trunc(zindex), Month = (zindex - trunc(zindex)) * 12, z)

Или сгенерировать последовательность дат с помощью

Year = rep(1961:1969, each = 12)[1:100]
Month = rep(1:12, times = 9)[1:100]
1 голос
/ 11 февраля 2011

Аналогичное решение для @ jonw's, но с использованием xts:

x <- as.xts(z)
d <- data.frame(Year=.indexyear(x)+1900, Month=.indexmon(x)+1, coredata(x))
...