簡體   English   中英

在 R 中存儲復雜的時間序列

[英]Storing complex time-series in R

我有一個 dataframe 有幾列:

  • state

然后是 x、y 和 z,其中 x、y 和 z 是上面列出的三元組獨有的觀測值。 我正在尋找一種理智的方式將其存儲在時間序列中,而 xts 不會讓我這樣做,因為每個時間索引都有多個觀察值。 我查看了 hts package,但無法弄清楚如何從 dataframe 中獲取我的數據。

(是的,我確實在 Quora 上發布了同樣的問題,並被建議把它帶到這里!)

一種選擇是重塑您的數據,以便為每個州-縣組合提供一列。 這允許您構造一個 xts 矩陣:

require(reshape)
Opt1 <- as.data.frame(cast(Data, Date ~ county + State, value="Val"))
rownames(Opt1) <- Opt1$Date
Opt1$Date <- NULL
as.xts(Opt1)

或者,您可以使用 xts 對象列表,每次都確保您具有 xts 要求的正確格式。 任何其他時間序列包也是如此。 一個可能的解決方案是:

Opt2 <- 
  with(Data,
    by(Data,list(county,State,year),
      function(x){
        rownames(x) <- x$Date
        x <- x["Val"]
        as.xts(x)
      }
    )
  )

這將允許類似:

Opt2[["d","b","2012"]]

到 select 一個特定的時間序列。 您可以使用所有 xts 選項。 您可以遍歷縣、州和年份來構建如下圖:

在此處輸入圖像描述

plot 的代碼:

counties <- dimnames(Opt2)[[1]]
states <- dimnames(Opt2)[[2]]
years <- dimnames(Opt2)[[3]]

op <- par(mfrow=c(3,6))
apply(
  expand.grid(counties,states,years),1,
  function(i){
    plot(Opt2[[i[1],i[2],i[3]]],main=paste(i,collapse="-"))
    invisible()
  }
)
par(op)

測試數據:

Data <- data.frame( State = rep(letters[1:3],each=90),
            county = rep(letters[4:6],90),
            Date = rep(seq(as.Date("2011-01-01"),by="month",length.out=30),each=3),
            Val = runif(270)
)
Data$year <- as.POSIXlt(Data$Date)$year + 1900

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM