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

Is there a function in aggregate which can count nonzero elements of a column

我有一个数据集如下:

         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 小时内每个日期的结果和 return 一个新的数据框,其中包括日期和呼叫的客户总数。我只需要对 ID 进行汇总,并为此编写了以下代码行:

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

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

您可以传递 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