首页 > 解决方案 > 格式化输入到 R 中的 ts 对象

问题描述

我有一些数据,其中包含以 week.year 表示的时间列以及在该周测量的相应单位。

    Week-Year             Units
    01.2020             39.12727273
    02.2020             33.34545455
    03.2020             118.7181818
    04.2020             83.71818182
    05.2020             58.56985
    .                    .
    52.2020             89.54651534

我必须创建一个ts对象,它将这些 Week-Year 值作为输入。需要此步骤的原因是 - 有时某些周内缺少值,因此使用自动生成的时间刻度(开始 =,结束 =,频率 =)会弄乱读数。有没有办法实现它?或者有什么办法可以适应这种情况?R新手在这里,非常感谢一些指导。:)

标签: rtime-series

解决方案


假设输入是最后DF在 Note 中可重现地显示的数据框,将其转换为 zoo 对象,然后用于as.ts创建ts频率为 52 的系列。

library(zoo)

week <- as.integer(DF[[1]])
year <- as.numeric(sub("...", "", DF[[1]]))
z <- zoo(DF[[2]], year + (week - 1) / 52)
tt <- as.ts(z)

tt
## Time Series:
## Start = c(2020, 1) 
## End = c(2020, 52) 
## Frequency = 52 
##  [1]  39.12727  33.34545 118.71818  83.71818  58.56985        NA        NA
##  [8]        NA        NA        NA        NA        NA        NA        NA
## [15]        NA        NA        NA        NA        NA        NA        NA
## [22]        NA        NA        NA        NA        NA        NA        NA
## [29]        NA        NA        NA        NA        NA        NA        NA
## [36]        NA        NA        NA        NA        NA        NA        NA
## [43]        NA        NA        NA        NA        NA        NA        NA
## [50]        NA        NA  89.54652

frequency(tt)
## [1] 52

class(tt)
## [1] "ts"

笔记

Lines <- "    Week-Year             Units
    01.2020             39.12727273
    02.2020             33.34545455
    03.2020             118.7181818
    04.2020             83.71818182
    05.2020             58.56985
    52.2020             89.54651534"
DF <- read.table(text = Lines, header = TRUE, colClasses = c("character", NA))

推荐阅读