是否有一个聚合函数可以计算列的非零元素

时间:2015-08-10 18:06:57

标签: r aggregate

我的数据集如下:

         Date        Hour    ID
         2014-01-01   0      0
         2014-01-01   1      0
         2014-01-01   10     0
         2014-01-01   11     0

我有一系列日期(2014年的所有日子)和一天中的24小时。如果ID为零,则表示在相应的日期和时间未收到任何呼叫。我想在24小时内汇总每个日期的结果,并返回一个新的数据框,其中包括日期和所调用的客户总数。我只需要对ID进行聚合,然后为此编写了以下代码行:

    SampleData <- aggregate(ID ~ Date, SampleData, length)

然而,结果不是我想要的。我需要计算聚合的非零ID,但我不知道该怎么做。

1 个答案:

答案 0 :(得分:4)

您可以传递aggregate一个函数,该函数使用非零ID计算每天的行数:

aggregate(ID~Date, data, function(x) sum(x != 0))
#         Date ID
# 1 2014-01-01  2
# 2 2014-01-02  0

数据(已更新,因此它有两个非零ID和两天):

(data = read.table(text="Date        Hour    ID
          2014-01-01   0      0
          2014-01-01   1      1
          2014-01-01   10     2
          2014-01-02   11     0", header=T))
#         Date Hour ID
# 1 2014-01-01    0  0
# 2 2014-01-01    1  1
# 3 2014-01-01   10  2
# 4 2014-01-02   11  0