开发者

Calculating Start for stl()

开发者 https://www.devze.com 2023-01-31 07:04 出处:网络
I\'m reading weekly data from a .csv data file.A sample of the data is: Date,Demand \"Feb 08, 1991\",6621

I'm reading weekly data from a .csv data file. A sample of the data is:

Date,Demand    
"Feb 08, 1991",6621    
"Feb 15, 1991",6433    
"Feb 22, 1991",6582   
"Mar 01, 1991",7224   
"Mar 08, 1991",6875   
"Mar 15, 1991",6947   
"Mar 22, 1991",7328   
"Mar 29, 1991",6777   
"Apr 05, 1991",7503
.....  

My code is:

> temp<-read.table(file="E:\\Data\\Demand_00.csv",header=TRUE, sep=",")
> stadat&l开发者_Python百科t;-strptime(as.character(temp[,1]),"%b %d, %Y")[1]
> statim<-as.numeric(strftime(stadat,"%Y"))+(as.numeric(strftime(stadat,"%j"))/366)
> temdat<-ts(temp[,2],start=statim,frequency=52)
> plot(temp2<- stl(log(temdat), "per"))

My question is: Is there a better/cleaner way to build statim (the start required in the above ts object)? Notice that this is weekly data that may or may not start at the first week of the year.

Thanks,

Bill


You could use the zoo package to simplify this:

File <- E:\\Data\\Demand_00.csv"

library(zoo)
fmt <- "%b %d, %Y"

year.jul <- function(x) as.numeric(format(x, "%Y")) + 
    as.numeric(format(x, "%j"))  / 366
z0 <- read.zoo(File, header = TRUE, sep = ",", FUN = as.Date, format = fmt,
    FUN2 = year.jul)
ts(z0, start = start(z0), frequency = 52)

On the other hand rather than forcing it into 366 days you might want to use cal.yr in the Epi package:

library(Epi)
z2 <- read.zoo(File, header = TRUE, sep = ",", FUN = cal.yr, format = fmt)
as.ts(z2)
0

精彩评论

暂无评论...
验证码 换一张
取 消