【问题标题】:Error for create data frame ts with zoo package使用 zoo 包创建数据框 ts 时出错
【发布时间】:2015-12-03 10:12:24
【问题描述】:

我尝试用我的特定案例使用 zoo 包创建时间序列分析的数据框,但是没有用,我的人工脚本是:

require(zoo)

TSdata<-NULL

TSdata$id<-seq(1:30) ##ID

TSdata$Date<-seq(as.Date("2015/1/15"), by = 15, length.out = 30) ## Vector of date

TSdata$rain<-rnorm(30,mean=125)#Covariate 1

TSdata$temp<-rnorm(30,mean=32.6) #Covariate 2

TSdata$y<-rpois(30,lambda=15) # Response variable

TSdata<-as.data.frame(TSdata) ## Convert to data frame

## Create temporal series object

ts.data <- read.zoo(text="TSdata", format="%Y/%m/%d", index.column = 2) ## Here the problem

【问题讨论】:

    标签: r dataframe time-series zoo


    【解决方案1】:

    您的代码中有两个错误:(1) 如果您想从data.frame 创建一个带有read.zoo()zoo 对象,那么您只需要提供对象TSdata 而不是一个字符串它的名字"TSdata"。 (2) format 不是 "%Y/%m/%d"。但由于索引已经是Date 列,因此无论如何都不需要提供format

    简单地做:

    read.zoo(TSdata, index.column = 2)
    ##            id     rain     temp  y
    ## 2015-01-15  1 125.3376 32.91936 13
    ## 2015-01-30  2 125.2048 32.71199 17
    ## 2015-02-14  3 125.7443 32.74698 17
    ## ...
    

    【讨论】:

      【解决方案2】:

      正确的解决方案是由另一个答案给出。作为另一种选择,您可以使用构造函数zoo:

      zoo(x=TSdata[,!grepl("Date",colnames(TSdata))],
          order.by = TSdata$Date)
      
      #            id     rain     temp  y
      # 2015-01-15  1 122.6501 32.46969 18
      # 2015-01-30  2 124.4833 31.46569 13
      # 2015-02-14  3 125.2021 33.05852 13
      

      【讨论】:

      • 事实上,read.zoo 可以从data.frame 创建一个zoo 对象。我将在单独的答案中对此进行解释。当然,您的解决方案也适用...
      • 是的,完全正确。但是您可以获得read.zoo 的其他便利工具:将字符转换为日期或POSIXct,如果时间/日期分布在多个列中,则合并时间/日期,拆分,聚合等。不过,在这种特殊情况下,这些都是不必要的。
      • @AchimZeileis 谢谢你的解释。也感谢您通过不可用的 zoo 包为社区做出的贡献。
      • :-) 谢谢,如果有用的话,很高兴!
      猜你喜欢
      • 1970-01-01
      • 2011-12-29
      • 1970-01-01
      • 2019-08-29
      • 2017-09-10
      • 1970-01-01
      • 2022-01-24
      • 2018-04-19
      • 1970-01-01
      相关资源
      最近更新 更多