我在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
这是有道理的,因为当动物园试图将事物转换为ts时,周末本身就会丢失。除了使用coredata(zoo_object)
将内容转换为向量并在其上运行ar()
之外,有没有办法告诉R跳过丢失的数据?
由于
答案 0 :(得分: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))
答案 1 :(得分:-2)
最简单的方法是将ZOO对象转换为data.frame对象
例如(z1
是动物园对象):
dz1<-data.frame(na.omit(z1))
然后将其转换为时间序列对象。
ts(dz1, frequency=5)