Используйте data.table для подсчета и агрегирования/суммирования столбца

Я хочу посчитать и агрегировать (суммировать) столбец в data.table и не могу найти наиболее эффективный способ сделать это. Кажется, это близко к тому, что я хочу R суммируя несколько столбцов с data.table.

Мои данные:

set.seed(321)
dat <- data.table(MNTH = c(rep(201501,4), rep(201502,3), rep(201503,5), rep(201504,4)), 
                  VAR = sample(c(0,1), 16, replace=T))

> dat
     MNTH VAR
 1: 201501   1
 2: 201501   1
 3: 201501   0
 4: 201501   0
 5: 201502   0
 6: 201502   0
 7: 201502   0
 8: 201503   0
 9: 201503   0
10: 201503   1
11: 201503   1
12: 201503   0
13: 201504   1
14: 201504   0
15: 201504   1
16: 201504   0

Я хочу, чтобы посчитать и MNTH VAR по MNTH используя data.table. Желаемый результат:

    MNTH COUNT VAR
1 201501     4   2
2 201502     3   0
3 201503     5   2
4 201504     4   2

Ответ 1

В публикации, на которую вы ссылаетесь, рассказывается, как применить один метод агрегирования к нескольким столбцам. Если вы хотите применить разные методы агрегирования к разным столбцам, вы можете сделать:

dat[, .(count = .N, var = sum(VAR)), by = MNTH]

это приводит к:

     MNTH count var
1: 201501     4   2
2: 201502     3   0
3: 201503     5   2
4: 201504     4   2

Вы также можете добавить эти значения в существующий набор данных, обновив свой набор данных по ссылке:

dat[, ':=' (count = .N, var = sum(VAR)), by = MNTH]

это приводит к:

> dat
      MNTH VAR count var
 1: 201501   1     4   2
 2: 201501   1     4   2
 3: 201501   0     4   2
 4: 201501   0     4   2
 5: 201502   0     3   0
 6: 201502   0     3   0
 7: 201502   0     3   0
 8: 201503   0     5   2
 9: 201503   0     5   2
10: 201503   1     5   2
11: 201503   1     5   2
12: 201503   0     5   2
13: 201504   1     4   2
14: 201504   0     4   2
15: 201504   1     4   2
16: 201504   0     4   2

Подробнее о том, как использовать синтаксис , см. В руководствах по началу работы на вики-сайте GitHub.