【问题标题】:Is there a function in aggregate which can count nonzero elements of a column是否有一个聚合函数可以计算列的非零元素
【发布时间】:2015-08-11 02:16:03
【问题描述】:

我有一个数据集如下:

         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,但我不知道该怎么做。

【问题讨论】:

    标签: r aggregate


    【解决方案1】:

    您可以向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
    

    【讨论】:

    • 很难推断 OP 的意图或数据,但“呼叫的客户总数”也可能意味着 length(unique(x[x != 0]))
    • @Frank 是的,当然也可能是这个意思。提供的示例只有无访问观察,这无济于事!
    猜你喜欢
    • 2023-01-18
    • 2022-01-08
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 2021-12-04
    • 2015-09-13
    • 1970-01-01
    • 2022-01-13
    相关资源
    最近更新 更多