R语言从tibble创建ts时间序列对象生成ggseasonplot报错求助
报错根因
ts()函数仅接受数值向量作为输入,原代码直接传入完整tibble,数据格式不符合要求- 时间参数配置错误:日度时间序列的
start参数需传入「年份+当年第N天」的二元向量,frequency=8不符合日度数据的季节周期规则,按周为季节周期的日度数据frequency应设为7 - 原始数据存在缺失的日期记录(样例中1月3、4日无数据),时间步长不连续,直接生成时间序列会导致数值与时间错位
修正实现代码
第一步:加载依赖包
library(tidyverse) library(lubridate) # 用于日期处理 library(forecast) # 包含ggseasonplot绘图函数
第二步:预处理数据补全连续日期
data_clean <- data %>% # 拼接年月日为标准日期格式 mutate(date = ymd(paste(Year, Month, Day, sep = "-"))) %>% # 补全所有连续的单日记录,缺失的案件数默认填充为0,可按需修改为NA complete(date = seq.Date(min(date), max(date), by = "day"), fill = list(Simple_Assault = 0))
第三步:生成ts时间序列对象
# 计算数据起始日期为2020年的第几天 start_day <- yday(min(data_clean$date)) # 仅提取案件数值列生成ts对象,frequency=7对应按周的季节周期 data_ts <- ts(data_clean$Simple_Assault, start = c(2020, start_day), frequency = 7)
第四步:绘制季节图
ggseasonplot(data_ts, year.labels = TRUE, col = hcl.colors(10, "Viridis"), main = "2020年简易攻击案每日数量周度季节波动")
内容的提问来源于stack exchange,提问作者Ed_Gravy
相关产品推荐
相关产品推荐

