如何用R语言的ts()函数将给定数据转换为小时级时间序列?
如何用R的
ts()函数处理你的预订人数时间序列 首先,帮你理清ts()函数里frequency参数的核心逻辑:它代表一个完整周期内包含的观测值数量,简单说就是「单位周期里有几个数据点」。你的纠结点在24和10,其实这两个都不是最适合的选项,下面给你拆解清楚:
先分析你的数据特征
你的数据是按2小时间隔采集的(11:00→13:00→15:00…),单日共有6个观测点。要确定frequency,首先得明确你设定的「周期」是什么——这里显然是一天(24小时)。
为什么24和10都不对?
- 选24的问题:
frequency=24意味着你假设一天内有24个观测点(每小时一个),但你的数据是每2小时一个,这样会让时间序列的间隔变成1小时,和实际数据间隔不匹配,还会产生大量缺失值,完全不符合需求。 - 选10的问题:10这个数字没有任何依据——你的数据既不是10个点为一个周期,一天也不是10小时,完全不贴合你的数据场景。
正确的frequency设置
因为你的数据是每2小时一个观测,一天24小时内会有12个这样的时间点(0:00、2:00…22:00),所以frequency应该设为12。这个参数告诉R:「我的时间序列以天为周期,每个周期里有12个2小时间隔的观测点」。
实操代码示例
# 整理原始数据 times <- c("11:00", "13:00", "15:00", "17:00", "19:00", "21:00") booked_res <- c(23, 26, 27, 25, 28, 30) # 创建时间序列:frequency=12(一天12个2小时间隔点),start指定第1天的第6个观测点(对应11:00) ts_booked <- ts(booked_res, frequency = 12, start = c(1, 6)) # 查看结果 print(ts_booked)
运行后你会得到结构正确的时间序列,每个数据点的位置对应它在一天中的2小时区间位置。
额外说明
如果后续你的数据扩展到覆盖全天所有2小时间隔的时间点(比如补充0:00、2:00等时段的数据),这个frequency=12的设置依然完全适用,不需要调整。
内容的提问来源于stack exchange,提问作者JWick
相关产品推荐
相关产品推荐

