[英]Storing complex time-series in R
我有一個 dataframe 有幾列:
然后是 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.