计算data.table中的行,按多列分组,包括“空”组

时间:2016-02-15 19:33:53

标签: r data.table

我有一个data.table,如下所示:

    ID      Date        Team    MonthFactor
1   2512    2015-04-24  Purple  2015-04
2   2512    2015-04-25  Purple  2015-04
3   2512    2015-04-26  Purple  2015-04
4   2512    2015-04-27  Purple  2015-04

我想获得按TeamMonthFactor分组的行数,包括当某个月有没有行时,如果紫色团队有IE,那么5月份没有条目但黄色没有,总结表看起来像:

    Team    MonthFactor N
1   Purple  2015-04     10
2   Purple  2015-05     0
3   Yellow  2015-04     5
4   Yellow  2015-05     7

如果我不需要“空”组,那么这样做是微不足道的,但是当我可能没有包含给定monthFactor的行时,我无法理解如何指定需要评估的组

2 个答案:

答案 0 :(得分:5)

您可以使用交叉联接来实现这一目标:

NSString *fileName = [array lastObject];
NSArray  *newArray = [array subarrayWithRange:NSMakeRange(0, array.count-1)];
NSString *directoryPath = [newArray componentsJoinedByString:@"\\"];

这给出了:

dat[, .N, .(Team, MonthFactor)
    ][CJ(Team, MonthFactor, unique = TRUE), on = c(Team = "V1", MonthFactor = "V2")
      ][is.na(N), N := 0][]

此方法的优点是更容易包含其他变量。假设 Team MonthFactor N 1: Purple 2015-04 2 2: Purple 2015-05 0 3: Yellow 2015-04 5 4: Yellow 2015-05 3 只是一个数值,请考虑以下示例:

ID

给出:

dat[, .(.N, sID = sum(ID)), .(Team, MonthFactor)
    ][CJ(Team, MonthFactor, unique = TRUE), on = c(Team = "V1", MonthFactor = "V2")
      ][is.na(N), `:=` (N = 0, sID = 0)][]

使用过的数据:

     Team MonthFactor N   sID
1: Purple     2015-04 2  5024
2: Purple     2015-05 0     0
3: Yellow     2015-04 5 12560
4: Yellow     2015-05 3  7536

答案 1 :(得分:3)

也许这可以起作用

data.table(table(dt$Team,dt$MonthFactor))