2017-07-12 5 views
1

ich eine täglich Umsatzzeitreihen habe df01-01-2014-15-06-2017 und ich mag die täglichen Umsatzdaten zu dem wöchentlichen Umsatzdaten aggregieren und die wöchentlichen Prognosen zu tun. Bevor ich den Umsatz aggregiere, muss ich create a continuously week variable, die NICHT starten ab Woche 1 wieder, wenn ein neues Jahr beginnt. Seit 01.01.2014 war nicht Montag, also entschied ich mich, meine erste Woche von 06-01-2014 zu starten.eine einzigartige Woche Variable erstellen NICHT auf dem Kalender in R je

Mein df sieht nun wie folgt

  date year month  total 
7 2014-01-06 2014  1 1857679.4 
8 2014-01-07 2014  1 1735488.0  
9 2014-01-08 2014  1 1477269.9  
10 2014-01-09 2014  1 1329882.9  
11 2014-01-10 2014  1 1195215.7 
... 
709 2017-06-14 2017  6 1677476.9 
710 2017-06-15 2017  6 1533083.4 

ich eine einzigartige week variable ab 2014-01-06 bis zur letzten Zeile meines Datensatzes (1257 Zeilen insgesamt) erstellt werden soll, das ist 2017-06-15.

Ich schrieb eine Schleife:

week = c() 
    for (i in 1:179) { 
    week = rep(i,7) 
    print(week) 
    } 

ist jedoch das Ergebnis dieser Schleife nicht für jede Iteration gespeichert. Wenn ich week eintippe, zeigt es nur 179,179,179,179,179,179,179

Wo ist das Problem und wie kann ich 180, 180, 180, 180 nach der Wiederholungsschleife hinzufügen?

Und wenn Ich werde weitere neue Daten nach 2017-06-15 hinzufügen, wie kann ich die wöchentliche Variable automatisch abhängig von meinem Ende der Zeile (Datum) erstellen? (Mit anderen Worten, auf diese Weise muss ich nicht berechnen, wie viele tägliche Beobachtungen ich habe und dividiere sie durch 7 plus den Rest der Daten, um der Wochenindex zu werden)

Vielen Dank!

Antwort

0

Hier ist die Antwort:

week = c() 
for (i in 1:184) { 
    for (j in 1:7) { 
      week[j+(i-1)*7] = i 
    } 
} 
week = as.data.frame(week) 

Ich habe eine week variable, und von Woche 1 bis Woche 184 (Ende meiner Datensatz). Für jede Wochennummer wiederhole ich 7 mal, weil es 7 Tage in der Woche gibt. Später habe ich die Woche-Variable meiner data frame zugewiesen.

2

funktionierts

library(lubridate) 

#DATA 
x = data.frame(date = seq.Date(from = ymd("2014-01-06"), 
     to = ymd("2017-06-15"), length.out = 15)) 

#Add year and week for each date 
x$week = year(x$date) + week(x$date)/100 

#Convert the addition of year and week to factor and then to numeric 
x$week_variable = as.numeric(as.factor(x$week)) 

#Another alternative 
x$week_variable2 = floor(as.numeric(x$date - min(x$date))/7) + 1 

x 
#   date week week_variable week_variable2 
#1 2014-01-06 2014.01    1    1 
#2 2014-04-05 2014.14    2    13 
#3 2014-07-04 2014.27    3    26 
#4 2014-10-02 2014.40    4    39 
#5 2014-12-30 2014.52    5    52 
#6 2015-03-30 2015.13    6    65 
#7 2015-06-28 2015.26    7    77 
#8 2015-09-26 2015.39    8    90 
#9 2015-12-24 2015.52    9   103 
#10 2016-03-23 2016.12   10   116 
#11 2016-06-21 2016.25   11   129 
#12 2016-09-18 2016.38   12   141 
#13 2016-12-17 2016.51   13   154 
#14 2017-03-17 2017.11   14   167 
#15 2017-06-15 2017.24   15   180 
+0

danke für die Antwort, aber ich denke, das ist nicht genau das, was ich will. Ich muss eine Woche Variable erstellen, beginnend bei 1 und wiederhole 7 mal bis zum Ende meines Datensatzes (jetzt ist 2017-06-15). – Sheryl

+0

Und ich möchte meine erste Woche ab Montag beginnen. Meine Daten beginnen also am "2014-01-06". Die Methode, die Sie zur Verfügung gestellt haben, war großartig, aber es beginnt am Mittwoch (01.01.2014). Wie könnte ich es ändern? – Sheryl

Verwandte Themen