2016-11-10 1 views
-1

Je suit les données source: enter image description hereR - Pivot les prévisions Résultat

Sur la base de 156 semaines, je voudrais faire les prévisions pour 52 prochaines semaines. Et le code suivant fonctionne très bien

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 

prévisions me donne la sortie suivante:

  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 

Ce que je voudrais faire maintenant est:

  1. Ajouter un produit & Localisation retour dans ce jeu de résultats
  2. Ajouter une colonne calculée: (Hi 95) - (Point Forecast) (J'ai aussi besoin de cette colonne Point Forecast)
  3. Pivot arrière de la table comme suit

enter image description here

Essayé ici Reshape, mais pas vraiment sûr comment l'exécuter car le résultat ne semble pas sous forme de tableau.

Link to download source file in csv

+0

ce qui est 'myDS' ?? – Sotos

+0

Et quelle est la structure des objets de données antécédents - * my.result * et * my.ts *? La même ligne/longueur de col à * my.fc *? – Parfait

+0

@Sotos myDS est l'ensemble de données source selon le fichier CSV. –

Répondre

0

Après ne donne ma sortie désirée:

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")