时间序列上的 R 错误
R error on timeseries
我有如下脚本
visit.total[with(visit.total, order(year, month)), ]
生成这样的数据框
year month visits
1 2013 1 342145
3 2013 2 273182
5 2013 3 257748
7 2013 4 210831
9 2013 5 221381
11 2013 6 207591
13 2013 7 205367
15 2013 8 145731
17 2013 9 109211
19 2013 10 65376
21 2013 11 64409
23 2013 12 58557
2 2014 1 65307
4 2014 2 36134
6 2014 3 79041
8 2014 4 110980
10 2014 5 107926
12 2014 6 79518
14 2014 7 98927
16 2014 8 113064
18 2014 9 60171
20 2014 10 43687
22 2014 11 47601
24 2014 12 47296
当我 运行 这个代码时 :
visit.total <- aggregate(data$visits,by=list(year=data$year,month=data$month), FUN=sum) #aggregate total visit
colnames(visit.total)[3] <- "visits"
total.visit.ts <- ts(visit.total$visits, start=c(2013,1),frequency = 12)
total.visit.ts
它给我的结果如下:
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2013 342145 65307 273182 36134 257748 79041 210831 110980 221381 107926 207591 79518
2014 205367 98927 145731 113064 109211 60171 65376 43687 64409 47601 58557 47296
为什么我做了timeseries函数后,我的数据和第一次不一样?请指教
如果没有更多关于您要做什么的信息,很难说清楚,但根据您的代码,我猜想您想要获得 2013 年和 2014 年每月出勤率的时间序列。发生了什么事你的代码是 R 可能根据你的数据帧的行号来安排你的数据。请注意,在您的时间序列中,2013 年 1 月的数据是正确的,但 2013 年 2 月的数据实际上是 2014 年 1 月的数据。发生的事情是时间序列按行号顺序读取(请参阅最左侧的列,其中 01/ 2013 年排名第一,01/2014 年排名第二。
我在其中复制了您的数据框的这段代码应该可以工作:
year <- as.numeric(c(2013, 2014))
month <- as.numeric(c(1:12))
visits <- as.numeric(c(342145, 273182, 257748, 210831, 221381, 207591, 205367, 145731, 109211, 65376, 64409, 58557,
65307, 36134, 79041, 110980, 107926, 79518, 98927, 113064, 60171, 43687, 47601, 47296))
visit.total <- merge(year, month)
colnames(visit.total) <- c("year", "month")
visit.total <- visit.total[order(visit.total$year, visit.total$month), ]
visit.total <- cbind(visit.total, visits)
visit.total.ts <- ts(visit.total$visits, start = c(2013, 1), end = c(2014, 12), frequency = 12)
您应该看到每月访问按月和年正确安排。
我有如下脚本
visit.total[with(visit.total, order(year, month)), ]
生成这样的数据框
year month visits
1 2013 1 342145
3 2013 2 273182
5 2013 3 257748
7 2013 4 210831
9 2013 5 221381
11 2013 6 207591
13 2013 7 205367
15 2013 8 145731
17 2013 9 109211
19 2013 10 65376
21 2013 11 64409
23 2013 12 58557
2 2014 1 65307
4 2014 2 36134
6 2014 3 79041
8 2014 4 110980
10 2014 5 107926
12 2014 6 79518
14 2014 7 98927
16 2014 8 113064
18 2014 9 60171
20 2014 10 43687
22 2014 11 47601
24 2014 12 47296
当我 运行 这个代码时 :
visit.total <- aggregate(data$visits,by=list(year=data$year,month=data$month), FUN=sum) #aggregate total visit
colnames(visit.total)[3] <- "visits"
total.visit.ts <- ts(visit.total$visits, start=c(2013,1),frequency = 12)
total.visit.ts
它给我的结果如下:
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2013 342145 65307 273182 36134 257748 79041 210831 110980 221381 107926 207591 79518
2014 205367 98927 145731 113064 109211 60171 65376 43687 64409 47601 58557 47296
为什么我做了timeseries函数后,我的数据和第一次不一样?请指教
如果没有更多关于您要做什么的信息,很难说清楚,但根据您的代码,我猜想您想要获得 2013 年和 2014 年每月出勤率的时间序列。发生了什么事你的代码是 R 可能根据你的数据帧的行号来安排你的数据。请注意,在您的时间序列中,2013 年 1 月的数据是正确的,但 2013 年 2 月的数据实际上是 2014 年 1 月的数据。发生的事情是时间序列按行号顺序读取(请参阅最左侧的列,其中 01/ 2013 年排名第一,01/2014 年排名第二。
我在其中复制了您的数据框的这段代码应该可以工作:
year <- as.numeric(c(2013, 2014))
month <- as.numeric(c(1:12))
visits <- as.numeric(c(342145, 273182, 257748, 210831, 221381, 207591, 205367, 145731, 109211, 65376, 64409, 58557,
65307, 36134, 79041, 110980, 107926, 79518, 98927, 113064, 60171, 43687, 47601, 47296))
visit.total <- merge(year, month)
colnames(visit.total) <- c("year", "month")
visit.total <- visit.total[order(visit.total$year, visit.total$month), ]
visit.total <- cbind(visit.total, visits)
visit.total.ts <- ts(visit.total$visits, start = c(2013, 1), end = c(2014, 12), frequency = 12)
您应该看到每月访问按月和年正确安排。