在R中如何将含日期列的data.frame正确转换为ts对象
日度时间序列转时间序列对象的解决方法
你用as.ts()把带日期列的data.frame转成字符型矩阵,是因为这个函数会把整个data.frame转成矩阵,而日期列会被强制转成字符类型,自然得不到想要的时间序列对象。下面给你几种实用的转换方法,适配TSstudio的分析需求:
方法1:用xts包创建日度序列(最推荐)
xts是处理日度时间序列的常用工具,TSstudio完美支持这类对象,操作起来也简单:
- 先安装并加载xts包(没装的话运行
install.packages("xts")) - 从data.frame里抽数值列,用日期列当索引生成xts对象
示例代码:
library(lubridate) library(xts) library(TSstudio) # 读数据、转日期 df <- read.csv("你的数据文件.csv") df$date <- ymd(df$date) # 日期格式如果是日-月-年就换成dmy,按需调整 # 生成xts时间序列 my_ts <- xts(x = df$你的数值列名, order.by = df$date) # 直接用TSstudio分析,比如画时序图 ts_plot(my_ts)
方法2:用tsibble包做tidy时间序列
tsibble是专为时间序列设计的 tidy 格式,适合后续的 tidy 分析流,TSstudio也兼容:
- 安装加载tsibble包(
install.packages("tsibble")) - 把data.frame转成tsibble,指定日期列作为时间索引
示例代码:
library(lubridate) library(tsibble) library(TSstudio) df <- read.csv("你的数据文件.csv") df$date <- ymd(df$date) # 转成tsibble对象 my_ts <- as_tsibble(df, index = date) # TSstudio分析示例 ts_plot(my_ts)
方法3:用base R的ts对象(不推荐日度场景)
base的ts对象是基于固定频率设计的,日度序列因为闰年、不同月份天数差异,用起来容易出问题,实在要用的话可以这么写:
library(lubridate) library(TSstudio) df <- read.csv("你的数据文件.csv") df$date <- ymd(df$date) # 定义起始日期的年和年内天数,频率设为365(闰年要手动调整,很麻烦) start_date <- min(df$date) start <- c(year(start_date), yday(start_date)) freq <- 365 # 生成ts对象 my_ts <- ts(df$你的数值列名, start = start, frequency = freq) # TSstudio分析 ts_plot(my_ts)
内容的提问来源于stack exchange,提问作者Francesco Ghizzo
相关产品推荐
相关产品推荐

