5

我在 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 跳过丢失的数据?

谢谢

4

2 回答 2

7

我收集到每一天都在您的数据中表示,包括工作日和周末,但没有数据存在的日子是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-03-14T04:16:37.197 回答
-2

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

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

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

ts(dz1, frequency=5)
于 2015-05-26T06:22:44.090 回答