2016-04-19 12 views
-1

ich einen Datenrahmen haben wie folgt:Collapse tägliche Datenrahmen bis zu wöchentlichen Datenrahmen in R

 office string_date A B C D E 
1:  11 2010-06-01 0 0 1 0 0 
2:  11 2010-06-02 0 0 0 1 0 
3:  11 2010-06-03 0 0 0 1 0 
4:  11 2010-06-04 0 0 0 1 0 
5:  11 2010-06-05 0 0 0 1 0 
6:  11 2010-06-06 0 1 0 0 0 
7:  11 2010-06-07 0 1 0 0 0 
8:  11 2010-06-08 0 1 0 0 0 
9:  11 2010-06-09 0 1 0 0 0 
10:  11 2010-06-10 0 1 0 0 0 
11:  11 2010-06-11 0 1 0 0 0 
12:  11 2010-06-12 0 1 0 0 0 

ich die Summen der einzelnen Spalten durch die Woche aggregieren müssen, nicht den Tag, wie es aufgeführt ist. So würde ich jede Woche für jedes Büro mit den Summen jeder Spalte verlassen. Die erste Zeile wäre ...

office week A B C D E 
    11  1  0 2 1 4 0 
    11  2  ............. 

ich etwas bin mit wie:

agg <- aggregate(list(data$A, data$B, data$C, data$D, data$E), list(office = data$office, Date = data$string_date), sum) 

Aber natürlich dies hat keine Möglichkeit, die Daten nach unten von Woche zu kollabieren. Diese Daten sind auch Zeichenfolgen, derzeit nicht posix.

+0

ich ziemlich sicher bin, das ist ein Duplikat. Weißt du, wie man sucht? Natürlich möchten Sie zumindest für den Aufbau eines Wochenvektors in Date-Klasse konvertieren. –

+0

Toller Weg, Menschen zum Codieren willkommen zu heißen ... bringen Sie die Einstellung und nicht die Hilfe. – Cybernetic

+0

http://stackoverflow.com/search?q=aggregate+data+frame+week –

Antwort

1

Erstellen Sie eine neue Spalte week mit der week Funktion aufgerufen und führen Sie dann eine Split-apply-kombinieren dazu:

DT[,week := week(string_date)][, lapply(.SD, sum), by = "office,week", .SDcols = 3:6] 

Oder in dplyr:

library(dplyr) 
DT %>% 
    group_by(office, week = week(string_date)) %>% 
    summarise_each(funs(sum), -string_date) 
+0

Ich gehe davon aus, dass Sie das "data.table" -Paket basierend auf Ihrem Ausdruck verwenden. – Hugh

+0

schön! Ich sehe die Summen für alle Büros in der Woche. Können wir das pro Büro bekommen? – Cybernetic

+0

Ah, dein zweiter tut es. Vielen Dank :) – Cybernetic