在R中将Excel数据转换为月度时间序列的问题求助
解决方案
1. 加载所需工具包
先安装并加载处理Excel和时间序列的核心包:
# 首次运行请执行安装 install.packages(c("readxl", "tsibble", "dplyr", "lubridate")) # 加载包 library(readxl) library(tsibble) library(dplyr) library(lubridate)
2. 读取Excel并指定变量类型
读取时直接强制Unidades为字符型,避免自动转换为数值:
# 替换为你的Excel文件路径,col_types参数指定Unidades为文本类型 df <- read_excel("your_data.xlsx", col_types = c(Unidades = "text", .default = "guess"))
3. 构建年月索引并转为tsibble格式
根据数据现有结构选择对应方式:
情况1:数据已有单独的年、月列
df_ts <- df %>% # 合并年、月为标准年月格式,取每月首日作为时间戳 mutate(年月 = ym(paste(年, 月, sep = "-"))) %>% # 转换为tsibble:Unidades作为分组键,年月作为时间索引 as_tsibble(key = Unidades, index = 年月)
情况2:数据仅含各Unidades的月度值,无时间列
假设每个Unidades对应2014-01至2023-12的120条月度数据:
# 生成2014-2023的月度时间序列 time_seq <- seq(ymd("2014-01-01"), ymd("2023-12-01"), by = "month") df_ts <- df %>% group_by(Unidades) %>% mutate(年月 = time_seq) %>% ungroup() %>% as_tsibble(key = Unidades, index = 年月)
4. 验证数据结构与季节性
# 查看tsibble结构 glimpse(df_ts) # 标记月度季节信息(周期为12) df_ts <- df_ts %>% mutate(季节 = month(年月, label = TRUE))
关键提示
- 无需用
rep函数,tsibble会自动维护分组时间序列的连续性,只要保证每个分组的时间索引完整即可 - 用
yearmonth()(tsibble专属函数)替代普通日期,更适配月度时间序列的分析需求
内容的提问来源于stack exchange,提问作者Lucas Medeiros dos Santos
相关产品推荐
相关产品推荐

