截取us_gasoline至2004年底时触发无效时间序列参数报错
报错原因分析
stats::window()是base R专为ts类时间序列设计的函数,如果us_gasoline是xts、zoo这类带日期索引的时间序列对象,它的时间属性并非tsp(ts对象的专属时间参数),调用base的window()会触发该报错。- 即便
us_gasoline是ts类周度序列,直接传end=2004也不符合规则:周度ts的频率为52,end需要指定为c(年份, 周数)的格式,单纯的2004无法被解析为合法的时间参数。
解决方法
先运行class(us_gasoline)确认时间序列类型,再对应处理:
情况1:us_gasoline是xts/zoo类对象
用xts/zoo自带的window()函数,或直接按日期索引筛选:
# 方法1:用xts的window函数 us_gasoline_sub <- window(us_gasoline, end = as.Date("2004-12-31")) # 方法2:直接索引筛选(更直观) us_gasoline_sub <- us_gasoline[index(us_gasoline) <= as.Date("2004-12-31")]
情况2:us_gasoline是base R的ts类对象
周度ts的end参数需指定年份+周数,或转成xts处理:
# 方法1:指定合法的end参数(假设2004年最后一周是第52周) us_gasoline_sub <- stats::window(us_gasoline, end = c(2004, 52)) # 方法2:转成xts筛选后再转回ts(更灵活) library(xts) us_gasoline_xts <- as.xts(us_gasoline) us_gasoline_sub <- us_gasoline_xts["/2004-12-31"] us_gasoline_sub_ts <- as.ts(us_gasoline_sub)
内容的提问来源于stack exchange,提问作者Shawn Pilusa
相关产品推荐
相关产品推荐

