2016-11-10 1 views
-1

ich folgende Quelldaten haben: enter image description hereR - Pivot die Vorhersage Ergebnis

Basierend auf vergangenen 156 Wochen, würde Ich mag Prognose für den nächsten 52 Wochen tun. Und folgende Code funktioniert gut

my.ds <- myDS[1, -c(3,4,5,6)] #reading my source file 
my.start <- myDS[1, c(3)] 
my.product <- myDS[1, c("Product")] 
my.product <- myDS[1, c("Location")] 
my.result <- melt(my.ds, id = c("Product","Location")) 
my.result[order(my.result$variable),] 
my.ts <- ts(my.result$value, frequency=52, start=c(my.start,1)) 
my.fc <- forecast(my.ts, h=52) 
my.fc 

Prognose gibt mir folgende Ausgabe:

  Point Forecast  Lo 80  Hi 80  Lo 95  Hi 95 
2003.000  1637.7675 -8.610502 3284.146 -880.15039 4155.685 
2003.019  1453.9059 -195.169681 3102.981 -1068.13753 3975.949 
2003.038  8668.6921 7016.923492 10320.461 6142.53000 11194.854 
2003.058  5851.0741 4196.616771 7505.531 3320.79997 8381.348 
2003.077  4333.9240 2676.782333 5991.066 1799.54453 6868.303 
2003.096  4284.5899 2624.768291 5944.412 1746.11178 6823.068 

Was Ich mag würde jetzt tun ist:

  1. Produkt hinzufügen & Lage wieder in dieses Ergebnis
  2. gesetzt
  3. Fügen Sie eine berechnete Spalte: (Hi 95) - (Point Forecast) (ich brauche dies auch Point Forecast Spalte)
  4. Pivot die Tabelle zurück, als

enter image description here

Versuchte reshape hier folgende, aber nicht wirklich sicher, wie es durchzuführen, da das Ergebnis im Tabellenformat scheint nicht.

Link to download source file in csv

+0

, was 'myDS' ?? – Sotos

+0

Und was ist die Struktur der antecedent Datenobjekte - * my.result * und * my.ts *? Gleiche Zeilen-/Spaltenlänge zu * my.fc *? – Parfait

+0

@Sotos myDS ist das Quell-Dataset gemäß der CSV-Datei. –

Antwort

0

Nach meinem gewünschten Ausgang nicht geben:

library(forecast) 
library(reshape) 
library(plyr) 

#exclude non required columns 
my.ds <- myDS[, -c(3,4,5,6)] 
#set the required date, Product, Location 
my.start <- myDS[1, c(3)] 
my.product <- myDS[1, c("Product")] 
my.location <- myDS[1, c("Location")] 
#unpivot the table 
my.result <- melt(my.ds, id = c("Product","Location")) 
#run forecasting 
# set the CIs we want to use here, so we can reuse this vector 
cis <- c(80, 95) 
# generate the forecast using those ci levels 
my.ts <- ts(my.result$value, frequency=52, start=c(my.start,1)) 
f <- forecast(my.ts, h=52, level=cis) 
# make a data frame containing the forecast information, including the index 
z <- as.data.frame(cbind(seq(1:52), 
        f$mean, 
        Reduce(cbind, lapply(seq_along(cis), function(i) cbind(f$lower[,i], f$upper[,i]))))) 
# give the columns better names 
names(z) <- c("index", "mean", paste(rep(c("lower", "upper"), times = length(cis)), rep(cis, each = 2), sep = ".")) 
# manipulate the results as you describe 
zw <- z %>% 
    # keep only the variable you want and its index 
    mutate(sssf = upper.95 - mean) %>% 
    select(index, mean, sssf) %>% 
    # add product and location info 
    mutate(product = my.product, 
    location = my.location) %>% 
# rearrange columns so it's easier to read 
select(product, location, index, mean, sssf) 
zw <- melt(zw, id.vars = c("product", "location", "index"), measure.vars = c("mean","sssf")) 
data.set <- cast(zw, product + location ~ index + variable, value = "value") 
Verwandte Themen