2017-10-03 11 views
-1

J'ai une série de données qui affiche les achats au fil du temps par numéro d'article. Les habitudes d'achat sont irrégulières, je voudrais donc lisser ces données au fil du temps et par numéro d'article.R: Lissage des données de séries temporelles par article

Si les articles avaient des commandes passées plus régulièrement (c'est-à-dire tous les jours), nous pourrions mieux tracer/évaluer nos niveaux de commande et de stockage. Cependant, certaines personnes achèteront l'excédent d'un article pour ne pas avoir à le réapprovisionner. Voilà donc biaiser nos données de niveau par (Puisqu'un 1 jour total pourrait vraiment être la valeur d'une semaine de produit car ils ne pouvaient commandera une fois par semaine

Reproductibles Exemple:.

POData <- structure(list(a = structure(c(1499918400, 1499918400, 1499918400, 
1499918400, 1499918400, 1499918400, 1496376000, 1497412800, 1497412800, 
1497412800, 1497412800, 1497412800, 1497240000, 1497412800, 1497412800, 
1497412800, 1501214400, 1496376000, 1496376000, 1496376000, 1496289600, 
1496289600, 1496289600, 1496289600, 1496289600, 1496289600, 1501214400, 
1501214400, 1501214400, 1501214400), class = c("POSIXct", "POSIXt" 
), tzone = ""), b = c(446032L, 101612L, 37740L, 482207L, 152360L, 
4483L, 482207L, 141729L, 81192L, 482207L, 85273L, 142955L, 460003L, 
142955L, 17752L, 29763L, 309189L, 361905L, 17396L, 410762L, 437420L, 
17752L, 18002L, 150698L, 163342L, 433332L, 150587L, 44159L, 433332L, 
446032L), c = c(4, 1, 25, 1, 1, 1, 3, 12, 12, 1, 1, 1, 300, 1, 
1, 2, 6, 6, 2, 1, 1, 1, 1, 1, 1, 1, 40, 2, 1, 2)), .Names = c("PO Date", 
"PS Item ID", "PO Qty"), row.names = c(NA, 30L), class = "data.frame") 

Ceci est probablement une question simple, mais j'espère que quelqu'un a un moyen simple de le faire.

Répondre

0

Vous pouvez utiliser quelque chose comme ça

require(zoo) 
require(dply) 

    df2 = POData %>% 
    arrange(`PS Item ID`,`PO Date`)%>% 
    group_by(`PS Item ID`)%>% 
    mutate(temp_lag1 = lag(`PO Qty`))%>% 
    mutate(temp.5.previous = rollapply(data = temp_lag1, 
            width = 2, 
            FUN = mean, 
            align = "left", 
            fill = `PO Qty`, 
            na.rm = T)) 

Il essentiellement par des groupes PS Item ID et organisé par PS Item ID et PO Date. L'argument width dans mutate spécifie dans quelle mesure vous souhaitez revenir en arrière pour une moyenne mobile. A partir de maintenant, il est mis à 1 parce que vos données ne sont pas si étendues par ID de produit.

+0

Cela fonctionne pour certains, mais beaucoup de valeurs finales apparaissent comme NAN - Comment puis-je faire face à ces valeurs non applicables? –