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