在R

2016-02-29 81 views
1

中強制xts到ts我有xts時間序列對象爲10天的數據。數據以分鐘頻率進行採樣。因此,對於每一天,我有1440觀察。我需要將xts強制爲ts對象,以便我可以使用example中使用的stl函數。但是,在強制,R產生錯誤爲在R

ts(min_data,start=start(min_data),end = end(min_data),frequency=10) 
Error in ts(min_data, start = start(min_data), end = end(min_data), frequency = 10) : 
    invalid time series parameters specified 

我設置頻率爲10,因爲我使用的是10天的數據。我不確定它應該是10還是1440.任何人都可以幫助我解決這個錯誤。

MWE是

library(xts) 
timevalues="20150101 0000/20150110 2359" 
timesequence<- timeBasedSeq(timevalues) 
min_data<-xts(rnorm(14400),timesequence) 
ts_data<- ts(min_data,start=start(min_data), end = end(min_data),frequency=10) 

UPDATE 雖然我能夠繪製使用stl功能由@Pascal作爲建議的圖表,但還是我缺少的x軸的時間組件圖形。任何幫助將不勝感激。

+0

不知道你想用一個'ts'對象做什麼,而是你應該讓你的'XTS '管理你的10分鐘數據。或者,如果你確實需要一個'ts'對象,我想最接近的就是'as.ts(min_data)'。 – 2016-02-29 09:55:52

+0

我想使用基本統計數據包的stl()函數。我也嘗試過'as.ts()' –

+1

然後嘗試'ts_data < - ts(as.numeric(min_data),頻率= 1440); plot(stl(ts_data,s.window =「per」))'。 – 2016-02-29 10:15:39

回答

2
library(xts) 
library(ggplot2) 
library(reshape2) 

set.seed(42) 
timevalues = "20150101 0000/20150110 2359" 
timesequence <- timeBasedSeq(timevalues) 
min_data <- xts(rnorm(14400),timesequence) 

ts_data <- ts(as.numeric(min_data), frequency = 1440) 
out <- stl(ts_data, s.window = "per") 
time.series <- as.data.frame(cbind(ts_data, out$time.series)) 
colnames(time.series) <- c("Data", "Seasonal", "Trend", "Remainder") 
time.series$Date <- timesequence 
time.series <- melt(time.series, 'Date') 

ggplot(time.series, aes(x=Date, y=value)) + 
    geom_line() + 
    facet_free(variable~.) 

enter image description here

2

獨XTS的解決方案,基於一個想法,我從看Pascal's answer了。

library(xts) 
set.seed(42) 
timevalues = "20150101 0000/20150110 2359" 
timesequence <- timeBasedSeq(timevalues) 
min_data <- xts(rnorm(14400),timesequence) 

ts_data <- ts(as.numeric(min_data), frequency = 1440) 
out <- stl(ts_data, s.window = "per") 

ts_out <- merge(min_data, out$time.series) 
plot.zoo(ts_out) 

enter image description here

+0

我應該從你的回答中推斷,當從'xts'對象強制'ts'對象時,不可能同時保留數據和索引 –

+1

@HaroonRashid:'ts'對象沒有象xts/zoo對象那樣的索引。他們不需要一個,因爲'ts'對象只能包含嚴格的常規數據。所以他們只有開始,結束和間隔的屬性。 'print.ts'可以很好地打印每年,每季度和每月數據的時間,但我不確定它們能夠很好地打印日內時間。 –

0

我想你正在尋找的是以下:

xts2ts <- function(XD) { 
      maxRow <- nrow(XD) 
      startYM <- c(.indexyear(acm[1]) + 1900, .indexmon(acm[1])) 
      endYM <- c(.indexyear(acm[maxRow]) + 1900, .indexmon(acm[maxRow])) 
      ts(coredata(XD), start = startYM, end = endYM, frequency = 12L) 
}