2016-07-12 6 views
3

Meine Daten sind in der monatlichen Häufigkeit verfügbar und ich versuche, sie in vierteljährlicher Häufigkeit zu aggregieren. Ich arbeite mit data.table welches Paket ich nicht sehr gut verstehe, um ehrlich zu sein.Wie kann ich data.table in vierteljährlicher Häufigkeit aggregieren?

X.DATA_BASE            NOME_INSTITUICAO  SALDO.x SALDO.y 
1:  199407 ASB S/A - CFI             1694581 1124580 
2:  199407 BANCO ARAUCARIA S.A.           40079517 6314782 
3:  199407 BANCO ATLANTIS S.A.           200463907 9356445 
4:  199407 BANCO BANKPAR             1078342 5770046 
5:  199407 BANCO BBI              97812975 31112289                        

Für jedes Datum, das von X.DATA_BASE definiert ist, 199.407 = Juli 1994 habe ich mehrere Institutionen mit SALDO.x und SALDO.y Werten. Ich möchte SALDO.x und SALDO.y für jede Institution in jedem Quartal hinzufügen. Eines der Probleme besteht darin, dass einige Institutionen einsteigen und durch die Zeit gehen. Am Ende des Tages möchte ich mydata mit den gleichen Spalten, aber vierteljährliche Häufigkeit haben.

Wie könnte ich das tun?

Antwort

2

Hier ist ein Beispiel für die Gruppierung und Summe nach Quartal (mit Dank an @ededi für seine vorgeschlagene Verbesserung). Lassen Sie uns zunächst einige gefälschte Datum erstellen:

library(data.table) 

set.seed(1485) 
dat = data.table(date=rep(c(199401:199412,199501:199512),2), 
      firm=rep(c("A","B"), each=24), 
      value1=rnorm(48,1000,10), 
      value2=rnorm(48,2000,100)) 

dat 
 date firm value1 value2 
1: 199401 A 1009.8620 2054.251 
2: 199402 A 1009.7180 2124.202 
3: 199403 A 1014.3421 1919.251 
... 
46: 199510 B 992.9961 2079.517 
47: 199511 B 997.9147 1968.676 
48: 199512 B 1002.5993 2006.231 

nun zusammenfassen Firma, Jahr und Quartal. Dazu erstellen wir year und quarter Gruppenvariablen aus date (verwenden wir Integer-Division (%/%), um die Jahre zu erstellen und mod (%%) und Integer-Division, das Quartier zu schaffen), und berechnen Sie die Summe von value1 und value2 für jeden Unter -Gruppe. Dies alles setzt voraus, date ist numerisch. Wenn Sie es als Zeichen oder Faktor gespeichert haben, konvertieren in numerische zuerst:

dat.summary = dat[ , list(valueByQuarter = sum(sum(value1) + sum(value2))), 
       by=list(firm, 
         year=date %/% 100, 
         quarter=(date %% 100 - 1) %/% 3 + 1)] 

dat.summary 
firm year quarter valueByQuarter 
1: A 1994  1  9131.626 
2: A 1994  2  8953.116 
3: A 1994  3  8981.407 
4: A 1994  4  9175.959 
5: A 1995  1  9003.225 
6: A 1995  2  8962.690 
7: A 1995  3  8809.256 
8: A 1995  4  8885.264 
9: B 1994  1  9000.791 
10: B 1994  2  8936.356 
11: B 1994  3  8905.789 
12: B 1994  4  8951.369 
13: B 1995  1  8922.716 
14: B 1995  2  9097.134 
15: B 1995  3  8724.188 
16: B 1995  4  9047.934 

Für dplyr Fans, hier ist ein dplyr Ansatz:

library(dplyr) 

dat %>% 
    group_by(firm, year=date %/% 100, 
      quarter=(date %% 100 - 1) %/% 3 + 1) %>% 
    summarise(valueByQuarter = sum(value1 + value2)) 
+0

funktioniert. Vielen Dank! –

Verwandte Themen