在 R 中指定时间序列

Specify Time series in R

我是 R 的新手,我正在尝试使用预测库使用 GA 连接进行一些预测。

我有这样的输入数据:

 day month year visits
1  01    01 2013  21821
2  02    01 2013  17865
3  03    01 2013  25300
4  04    01 2013  41184
5  05    01 2013  48953
6  06    01 2013  64135

它抓取每个月和每年的访问量。

当我尝试使用 ts 函数时,我是这样的:

visits.ts=ts(ga.data$visits, start=c(2013,1), end=c(2014,1), frequency=12)

给出这样的输出:

     Jan   Feb   Mar   Apr   May   Jun   Jul   Aug   Sep   Oct   Nov   Dec
2013 
2014 

这是我的问题 - 我如何将月份拆分为几天并创建这样的输出:

      01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
January 2013
February 2013

首先创建一些测试数据,DF。 (以后请提供测试数据。)

# create data set for testing
tt0 <- seq(as.Date("2013-01-01"), as.Date("2014-12-31"), by = "day")
lt <- as.POSIXlt(tt0)
DF <- data.frame(year = lt$year + 1900, month = lt$mon + 1, day = lt$mday, visits = 1:730)

以下内容主要取决于包含完全相同天数的每一年(即没有闰年)。幸运的是,问题中显示的数据就是这种情况。使用 DF 将其转换为 "ts" class:

# convert to ts
tser <- ts(DF$visits, start = 2013, freq = 365)

如果我们确实有闰年,我们可能想使用 zoo 包中的 "zoo" class 或 xts 包中的 "xts" class。

对于第二个问题,首先附加一个year_month列,然后使用dcast创建一个二维显示:

library(reshape2)
DF2 <- transform(DF, year_month = I(sprintf("%d-%02d", year, month)))
dcast(DF2, year_month ~ day, value.var = "visits")

或使用 zoo 包中的 as.yearmon

library(reshape2)
library(zoo)
DF2 <- transform(DF, year_month = as.yearmon(paste(year, month, sep = "-")))
dcast(DF2, year_month ~ day, value.var = "visits")

这是第三种选择。这个虽然有点慢,但没有使用任何外部包:

 DF2 <- transform(DF, day = factor(day), year_month = sprintf("%d-%02d", year, month))
 xtabs(visits ~ year_month + day, DF2, sparse = TRUE)

省略 sparse=TRUE 会更快,但会用 0 填充未使用的位置。