Я делаю анализ почасовых осадков на файл, который неорганизован. Однако мне удалось очистить его и сохранить в кадре данных (с именем 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
Где 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
Используя переменную dat1, я ввожу ее в качестве аргумента для получения данных временного ряда:
> rainCA1 <- ts(dat1, start = c(1900+as.POSIXlt(CA1[1,5])$year, 1+as.POSIXlt(CA1[1,5])$mon),
frequency = 24)
Несколько замечаний:
>dim(CA1)
[1] 5636 31
>length(dat1)
[1] 135264
Таким образом, всего 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)
, я получаю 1134 общей длины точек, где мне не хватает многих данных. Я предполагаю, что это связано с тем, что даты не являются последовательными, и поскольку я применяю только месяц и год в качестве аргумента для отправной точки.
Продолжая путь, который я считаю правильным,используя первое вычисление ts без конечного аргумента, я подаю его в качестве входных данных для stl:
>rainCA1_2 <-stl(rainCA1, "periodic")
К сожалению, я получаю сообщение об ошибке :
Error in stl(rainCA1, "periodic") : only univariate series are allowed
, которое я не понимаю и как это сделать. Однако, если я вернусь к функции ts и предоставлю конечный аргумент, stl работает нормально без каких-либо ошибок.
Я исследовал множество форумов, но никто (или, насколько я понимаю, )не предлагает хорошего решения для получения атрибутов данных почасовых данных. Если кто-нибудь может мне помочь, я буду очень признателен. Спасибо!