2016-07-12 4 views
3

Мои данные доступны в ежемесячной частоте, и я пытаюсь их заполнить ежеквартально. Я работаю с data.table, который я не очень хорошо понимаю, если честно.Как я могу заполнить таблицу данных по квартальной частоте?

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                        

Для каждой даты, которая определяется X.DATA_BASE, 199407 = июля 1994 У меня есть несколько институтов со значениями SALDO.x и SALDO.y. Я хочу добавлять SALDO.x и SALDO.y для каждого учреждения каждый квартал. Одна из проблем заключается в том, что некоторые учреждения забираются и выходят через время. В конце дня я хочу иметь mydata с одинаковыми столбцами, но ежеквартально.

Как я мог это сделать?

ответ

2

Вот пример того, как группировать и суммировать по четверти (благодаря @eddi для его предлагаемого улучшения). Во-первых, давайте создадим некоторые поддельные дата:

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 

Теперь, обобщать фирмой, год и квартал. Чтобы сделать это, мы создаем year и quarter группировки переменных из date (мы используем целочисленное деление (%/%), чтобы создать годы и мода (%%) плюс целочисленное деление создать кварталы), и вычислить сумму value1 и value2 для каждого суб -группа. Все это предполагает, что date является числовым. Если у вас есть она хранится как символ или фактор, преобразовать в числовой первый:

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 

Для dplyr поклонников, вот dplyr подход:

library(dplyr) 

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

работает отлично. Благодаря! –

 Смежные вопросы

  • Нет связанных вопросов^_^