使用data.table计算、汇总/总结一列数据

45
我想在data.table中计数并汇总(求和)一列,但找不到最有效的方法。这似乎接近我想要的结果:R summarizing multiple columns with 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

我希望使用data.table对MNTH进行分组,同时计算并汇总VAR。期望的结果如下:

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

我认为这个问题的被接受的答案比这个问题中链接的被接受的答案更容易理解,即使在单列情况下也是如此。 - Josiah Yoder
我认为这是因为另一个问题针对的是多列情况。 - Josiah Yoder
1个回答

67

您所参考的帖子介绍了如何将一个聚合方法应用于多个列。如果您想要对不同的列应用不同的聚合方法,可以这样做:

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维基上的入门指南


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接