Tôi đang phân tích về lượng mưa theo giờ trên một tệp bị vô tổ chức. Tuy nhiên, tôi quản lý để làm sạch nó lên và lưu trữ nó trong một dataframe (gọi tắt là CA1) mà có dạng như sau:Chuỗi thời gian và stl trong R: Chỉ cho phép chuỗi số bất biến chỉ được phép
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
đâu H0 qua H23 đại diện cho 24 giờ mỗi ngày (hàng)
Sử dụng chỉ CA1 (các dataframe ở trên), tôi uống mỗi ngày (hàng) của 24 điểm và transpose nó theo chiều dọc và nối những ngày còn lại (hàng) cho một biến, mà tôi gọi 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
Sử dụng dat1 biến , Tôi nhập nó làm đối số để lấy dữ liệu chuỗi thời gian:
> rainCA1 <- ts(dat1, start = c(1900+as.POSIXlt(CA1[1,5])$year, 1+as.POSIXlt(CA1[1,5])$mon),
frequency = 24)
Một số điều cần lưu ý:
>dim(CA1)
[1] 5636 31
>length(dat1)
[1] 135264
Như vậy 5636 * 24 (tổng số điểm dữ liệu [24] mỗi hàng) = 135.264 tổng số điểm. Độ dài (rainCA1) đồng ý với các điểm trên. Tuy nhiên, nếu tôi chấm dứt hàm ts, chẳng hạn như
>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)
Tôi nhận được tổng cộng 1134 điểm, nơi tôi thiếu nhiều dữ liệu. Tôi giả định điều này là do những ngày không liên tục và vì tôi chỉ áp dụng tháng và năm làm đối số cho điểm xuất phát.
Tiếp tục, trong những gì tôi nghĩ là con đường đúng đắn, bằng cách sử dụng tính ts đầu tiên mà không có sự tranh luận kết thúc, tôi cung cấp nó như là một đầu vào cho STL:
>rainCA1_2 <-stl(rainCA1, "periodic")
Thật không may, tôi nhận được một lỗi:
Error in stl(rainCA1, "periodic") : only univariate series are allowed
Điều tôi không hiểu hoặc cách thực hiện. Tuy nhiên, nếu tôi quay trở lại hàm ts và cung cấp đối số kết thúc, thì stl sẽ hoạt động tốt mà không có bất kỳ lỗi nào.
Tôi đã nghiên cứu trong rất nhiều diễn đàn, nhưng không ai (hoặc theo hiểu biết của tôi) cung cấp giải pháp tốt để thu thập các thuộc tính dữ liệu của dữ liệu hàng giờ. Nếu bất cứ ai có thể giúp tôi, tôi sẽ đánh giá cao nó. Cảm ơn bạn!