我是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
答案 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填充未使用的位置。