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

R语言ts函数月度时间序列统计异常问题求助

问题排查与解决方案

你当前的代码逻辑存在核心错误:ts()函数被直接用于转换每日数据,但frequency=12指定了序列为月度频率,这会让R把你的每日数据依次当成每个月的单个观测值(比如第1个值对应2014年1月、第2个值对应2014年2月……),完全没有执行月度汇总操作,所以结果自然和你预期的月度统计值不符。


解决步骤:先汇总月度数据,再转时间序列

需要先把每日的number按月份做统计(求和/均值等),得到月度层面的数据后,再转换为时间序列对象。

方法1:基础R实现

set.seed(1)
df <- data.frame(date_rec = seq(as.Date("2014-01-01"),as.Date("2015-12-31"), by=1),
                 number = sample(c(1:10),size = 730, replace=TRUE))

# 生成年份-月份的分组标识
df$year_month <- format(df$date_rec, "%Y-%m")
# 按月份汇总求和
monthly_data <- aggregate(number ~ year_month, data = df, sum)

# 转换为ts对象
start_year <- as.integer(substr(monthly_data$year_month[1], 1, 4))
start_month <- as.integer(substr(monthly_data$year_month[1], 6, 7))
df_ts <- ts(monthly_data$number, frequency = 12, start = c(start_year, start_month))

# 查看结果
df_ts

方法2:tidyverse工具链(更简洁)

library(tidyverse)
library(lubridate)

set.seed(1)
df <- tibble(date_rec = seq(as.Date("2014-01-01"),as.Date("2015-12-31"), by=1),
             number = sample(c(1:10),size = 730, replace=TRUE))

# 按年、月分组求和
monthly_data <- df %>%
  mutate(year = year(date_rec), month = month(date_rec)) %>%
  group_by(year, month) %>%
  summarise(total_number = sum(number), .groups = "drop")

# 转换为ts对象
df_ts <- ts(monthly_data$total_number, frequency = 12, start = c(2014, 1))

# 查看结果
df_ts

运行后你会看到2014年1月的统计值变为该月所有number的总和(比如用set.seed(1)时结果为172),完全符合你“远超100”的预期。

内容的提问来源于stack exchange,提问作者Joep_S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 23:46:12