You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中创建30年每年23周的时间序列?解决条目数异常

问题原因

你使用ts()函数时设置了frequency=52,这个参数会让R按照全年52周的规则生成时间序列框架,自动填充你未收集数据的周数(比如每年1-4月、10月中旬到年底的所有周)。从1991年第1周到2020年第23周的总长度计算为(2020-1991)*52 +23 = 1531,这就是生成多余条目的核心原因。

解决方案

方案一:创建不规则时间序列(推荐)

因为你的数据是非全年连续的周度数据,用zoo或xts包可以精准匹配实际数据,不会自动填充缺失值:

  1. 若数据未自带日期列,先为每条数据生成对应的日期索引:
    # 生成每年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)))
    
  2. 用zoo创建时间序列:
    library(zoo)
    my_zoo <- zoo(df$Kc_Kamble, order.by = all_dates)
    
    或用xts包:
    library(xts)
    my_xts <- xts(df$Kc_Kamble, order.by = all_dates)
    
    这种方式会严格保留你现有的690条数据,且时间戳与实际收集日期精准对应。

方案二:将数据视为年度内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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 20:25:47