Luc*_*uez 11 r time-series decomposition
我正在对一个无组织的文件进行每小时降水分析.但是,我设法清理它并将其存储在一个数据框(称为CA1)中,其形式如下:
Station_ID Guage_Type Lat Long Date Time_Zone Time_Frame H0 H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 H11 H12 H13 H14 H15 H16 H17 H18 H19 H20 H21 H22 H23
1 4457700 HI 41.52 124.03 1948-07-01 8 LST 0 0 0 0 0 0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0 0 0 0 0 0 0 0 0 0 0 0
2 4457700 HI 41.52 124.03 1948-07-05 8 LST 0 1 1 1 1 1 2.0000000 2.0000000 2.0000000 4.0000000 5.0000000 5.0000000 4 7 1 1 0 0 10 13 5 1 1 3
3 4457700 HI 41.52 124.03 1948-07-06 8 LST 1 1 1 0 1 1 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0 0 0 0 0 0 0 0 0 0 0 0
4 4457700 HI 41.52 124.03 1948-07-27 8 LST 3 0 0 0 0 0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0 0 0 0 0 0 0 0 0 0 0 0
5 4457700 HI 41.52 124.03 1948-08-01 8 LST 0 0 0 0 0 0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0 0 0 0 0 0 0 0 0 0 0 0
6 4457700 HI 41.52 124.03 1948-08-17 8 LST 0 0 0 0 0 0 0.3888889 0.3888889 0.3888889 0.3888889 0.3888889 0.3888889 6 1 0 0 0 0 0 0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
H0到H23表示每天24小时(行)
仅使用CA1(上面的数据帧),我每天(行)得到24个点并将其垂直移调并将剩余的天数(行)连接到一个变量,我称之为dat1:
> dat1[1:48,]
H0 H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 H11 H12 H13 H14 H15 H16 H17 H18 H19 H20 H21 H22 H23 H0 H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 H11 H12 H13 H14 H15 H16 H17 H18 H19 H20 H21 H22 H23
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 2 2 2 4 5 5 4 7 1 1 0 0 10 13 5 1 1 3
Run Code Online (Sandbox Code Playgroud)
使用变量dat1,我将其作为参数输入以获取时间序列数据:
> rainCA1 <- ts(dat1, start = c(1900+as.POSIXlt(CA1[1,5])$year, 1+as.POSIXlt(CA1[1,5])$mon),
frequency = 24)
Run Code Online (Sandbox Code Playgroud)
有几点需要注意:
>dim(CA1)
[1] 5636 31
>length(dat1)
[1] 135264
Run Code Online (Sandbox Code Playgroud)
因此,5636*24(每行的总数据点[24])=总共135264个点.长度(rainCA1)与上述几点一致.但是,如果我在ts函数中结束,例如
>rainCA1 <- ts(dat1, start = c(1900+as.POSIXlt(CA1[1,5])$year, 1+as.POSIXlt(CA1[1,5])$mon),
end = c(1900+as.POSIXlt(CA1[5636,5])$year, 1+as.POSIXlt(CA1[5636,5])$mon),
frequency = 24)
Run Code Online (Sandbox Code Playgroud)
我得到1134总点数,我缺少很多数据.我假设这是因为日期不是连续的,因为我只将月份和年份作为起点的参数.
继续,我认为是正确的路径,使用没有结束参数的第一个ts计算,我提供它作为stl的输入:
>rainCA1_2 <-stl(rainCA1, "periodic")
Run Code Online (Sandbox Code Playgroud)
不幸的是,我收到一个错误:
Error in stl(rainCA1, "periodic") : only univariate series are allowed
Run Code Online (Sandbox Code Playgroud)
我不明白或如何去做.但是,如果我返回ts函数并提供end参数,stl工作正常,没有任何错误.
我在很多论坛上都有研究,但没有人(或者我的理解)提供了一个很好的解决方案来获取每小时数据的数据属性.如果有人能帮助我,我将非常感激.谢谢!
小智 9
该错误是数据形状的结果.尝试> dim(rainCA1); 我怀疑它会给出类似的东西> [1] 135264 1.替换rainCA1 <- ts(dat1 ...为rainCA1 <- ts(dat1[[1]] ...,它应该工作.
无论是否正确,我想知道......在我看来,您的第一个业务是获得一致格式的数据.确保ts()获得正确的输入.查看精确的规格ts.
ts()不解释日期时间格式.ts()需要具有固定间隔的连续数据点.它使用一个主要计数器和一个小计数器(frequency适合一个主要计数器).举例来说,如果你的数据是每小时,你希望在日线级别的季节性,frequency等于24. start和end,因此,主要是化妆品:start只是表示(0)为主要计数器T,而end表示T(结束).