在R

时间:2015-10-14 13:39:18

标签: r forecasting

我是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

1 个答案:

答案 0 :(得分:1)

首先创建一些测试数据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"类:

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

如果我们确实有闰年,我们可能希望使用动物园包中的"zoo"类或xts包中的"xts"类。

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

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

或使用动物园包中的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填充未使用的位置。