【问题标题】:internal NA time series, zoo, R内部 NA 时间序列,动物园,R
【发布时间】:2012-03-30 12:55:51
【问题描述】:

我在 R 中有一个动物园对象,它有每日数据并且缺少周末。当我尝试在对象上运行一些函数(例如 ar() )时,我得到了错误:

mkt.ar <- ar(zoo_object)
Error in na.fail.default(as.ts(x)) : missing values in object

如果我这样做:

mkt.ar <- ar(zoo_object, na.action=na.omit)
Error in na.omit.ts(as.ts(x)) : time series contains internal NAs

这是有道理的,因为当 zoo 尝试将事物转换为 ts 时,周末本来就没有。除了使用 coredata(zoo_object) 将事物转换为向量并在其上运行 ar() 之外,有没有办法告诉 R 跳过丢失的数据?

谢谢

【问题讨论】:

    标签: r time-series zoo missing-data


    【解决方案1】:

    最简单的方法是将 ZOO 对象转换为 data.frame 对象 例如(z1 是动物园对象):

    dz1<-data.frame(na.omit(z1))
    

    然后将其转换为时间序列对象。

    ts(dz1, frequency=5)
    

    【讨论】:

      【解决方案2】:

      我收集到您的数据中包含每一天,包括工作日和周末,但没有数据的日子是 NA(而不是根本不存在)。以后请提供一些测试数据,以便更清楚。

      除了您的解决方案之外,如果您有足够的数据,您只需提取周五或之前的最后一个非缺失值即可对每周数据执行ar:

      library(zoo)
      
      # test data
      library(chron) # is.weekend
      z <- zoo(100:130, as.Date("2000-01-01") + 0:30)
      z[is.weekend(time(z))] <- NA
      
      # extract Fridays
      zfri <- na.locf(z)[format(time(z), "%w") == 5]
      

      (如果没有遗漏的星期五,可以通过将na.locf(z) 替换为z 来缩短它。)

      另一种可能性是使用 1, 2, ... 作为时间,但给它们命名,在这种情况下,您总是可以通过检查时间名称来找出一个点所属的日期.

      z1 <- na.omit(z)
      time(z1) <- setNames(seq_along(z1), time(z1))
      

      【讨论】:

        猜你喜欢
        • 2012-02-27
        • 2014-11-10
        • 2023-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-14
        • 1970-01-01
        • 2012-08-29
        相关资源
        最近更新 更多