這個問題創建正確的輸入名稱是沒有必要的相關的hts
包,但它的動機是從需求得出的指定的hts
包(列名功能hts
參數「字符中的層級「)高溫超導字符參數[R
原始數據:
library(data.table)
Original<-data.table(column_names=c("12_2985_40_4025", "12_2986_26_4027",
"12_3385_17_4863", "48_2570_433_3376"))
Original[,nchar:=nchar(column_names)]
Original
原始
names nchar
1: 12_2985_40_4025 15
2: 12_2986_26_4027 15
3: 12_3385_17_4863 15
4: 48_2570_433_3376 16
請注意,每行由一個層次結構中構建的單個時間序列的4個粘貼標籤組成,例如Original$names[1]: "12_2985_40_4025
,是一個時間系列「12」,子類型「2985」,子子類型「40」和唯一標識符「4025」
插圖原始數據層次的:
整數表示,其中底部級別名稱可以是 讀爲了構建區段相應的節點結構及其 標籤。例如,假設底部系列之一被命名爲 「VICMelb」,指的是維多利亞州境內的墨爾本市。然後字符將被指定爲c(3,4),其參考3個字符(例如,「VIC」)的 狀態和4個字符的城市(例如, 「Melb」)。所有的底部名稱必須具有相同的長度,其中每個片段的字符數 對於所有系列都是相同的。
所以我需要轉換的「原始」格式轉換「需要」的格式,這樣我就可以進一步將其輸入到hts
對象,發現我已經爲了加入「L」(可以是任何字符)到創建相同長度的所有子子水位:
required<-data.table(names=c("12_2985_40l_4025", "12_2986_26l_4027",
"12_3385_17l_4863", "48_2570_433_3376"))
required[,nchar:=nchar(names)]
required
需要
names nchar
1: 12_2985_40l_4025 16
2: 12_2986_26l_4027 16
3: 12_3385_17l_4863 16
4: 48_2570_433_3376 16
所以現在從hts
下面的代碼將工作,因爲,每個「名稱」將被分成4個級別的lengt的H:3,5,4,4(包括下劃線):
library(hts)
abc <- ts(5 + matrix(sort(rnorm(1000)), ncol = 4, nrow = 100))
colnames(abc) <- required$names
y <- hts(abc, characters=c(3,5,4,4)) #this would work after properly fixing
Alert_forecast <- forecast(y, h=10, method="comb")
plot(Alert_forecast, include=10)
通用的解決方案,不過,我覺得的: (雖然我真的沒能正確地制定成代碼,不挑釁優雅的一個) 爲了將其轉換爲正確的格式,我想先找到所有4個級別的最大值(對於所有的「名稱」值),然後對所有「名稱」運行一個循環,並將每個級別分成一個循環,以及如果它的水平較短,粘貼必要的ll,那麼它將具有與其他同等水平TS相同的名稱長度。
更改第一行以使用新的'tstrsplit'函數(奇怪地忘了它)... –
謝謝,虐待嘗試:) –