如何在R中创建30年每年23周的时间序列?解决条目数异常
问题原因
你使用ts()函数时设置了frequency=52,这个参数会让R按照全年52周的规则生成时间序列框架,自动填充你未收集数据的周数(比如每年1-4月、10月中旬到年底的所有周)。从1991年第1周到2020年第23周的总长度计算为(2020-1991)*52 +23 = 1531,这就是生成多余条目的核心原因。
解决方案
方案一:创建不规则时间序列(推荐)
因为你的数据是非全年连续的周度数据,用zoo或xts包可以精准匹配实际数据,不会自动填充缺失值:
- 若数据未自带日期列,先为每条数据生成对应的日期索引:
# 生成每年5月5日的起始日期向量 start_dates <- seq.Date(as.Date("1991-05-05"), as.Date("2020-05-05"), by = "year") # 为每年生成23个连续周的日期(可根据数据实际周起始日调整) all_dates <- do.call(c, lapply(start_dates, function(x) seq.Date(x, by = "week", length.out = 23))) - 用
zoo创建时间序列:
或用library(zoo) my_zoo <- zoo(df$Kc_Kamble, order.by = all_dates)xts包:
这种方式会严格保留你现有的690条数据,且时间戳与实际收集日期精准对应。library(xts) my_xts <- xts(df$Kc_Kamble, order.by = all_dates)
方案二:将数据视为年度内23期序列
如果不需要真实的周度日期,仅需按年度内的顺序分析,可把frequency设为23,让ts将每年视为23个独立周期:
myts <- ts(df$Kc_Kamble, start = 1991, end = 2020, frequency = 23)
此时时间索引为年份+年度内期数(如1991.0对应当年第1条数据,1991.956对应当年第23条),总长度正好是30*23=690。
内容的提问来源于stack exchange,提问作者Kelechi Igwe
相关产品推荐
相关产品推荐

