gpt4 book ai didi

r - 在 R 中存储复杂的时间序列

转载 作者:行者123 更新时间:2023-12-04 11:30:40 25 4
gpt4 key购买 nike

我有一个包含几列的数据框:

  • 状态
  • 年份

  • 然后是 x、y 和 z,其中 x、y 和 z 是上面列出的三元组独有的观测值。我正在寻找一种理智的方式将其存储在时间序列中,而 xts 不会让我这样做,因为每个时间索引都有多个观察值。我查看了 hts 包,但无法弄清楚如何从数据框中获取我的数据。

    (是的,我确实在 Quora 上发布了同样的问题,并被建议把它带到这里!)

    最佳答案

    一种选择是 reshape 您的数据,以便为每个州-县组合提供一列。这允许您构造一个 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"]]

    选择特定的时间序列。您可以使用所有 xts 选项。您可以遍历县、州和年份来构建像这样的地 block :

    enter image description here

    情节代码:
    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

    关于r - 在 R 中存储复杂的时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5852641/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com