按日期和项目计数汇总

时间:2018-06-20 20:04:20

标签: r

我是R的新手,我正在尝试做一些我认为很简单的事情,但事实证明并非如此。我有以下格式的CSV数据:

def function(self, some_id):
    filter_kwargs = {}

    if some_id:
        filter_kwargs['model2__id'] = some_id

    return Model1.objects.filter(**filter_kwargs)

我想产生类似以下的内容:

document_id, change_id, change_author, doc_author, date
aaaaaaa, a1, joe, jessie, 3/15/17
aaaaaaa, a2, jane, jessie, 1/2/17
bbbbbbb, a1, jane, jack, 4/5/17

期望的结果是作者在任何给定月份完成的注释数量,无论注释是针对哪个文档制作的。

我到处都碰到了新砖墙,包括仅看到如何创建具有命名行而不是命名列的data.frame。我可以获得作者列表和日期列表,但似乎无法生成所需的汇总。到目前为止,我的代码是:

Author   17-01   17-02   17-03   17-04     # this is the header row
Joe         12       8      15       2     # Count for joe
Jane        17      15      22      10

1 个答案:

答案 0 :(得分:0)

调用数据dd,我们可以使用reshape2::dcast函数通过此聚合将数据从长转换为宽。如果数据很大,则应将其设置为data.table,而应使用data.table::dcast

dd$month = lubridate::floor_date(as.Date(dd$date, "%m/%d/%y"), unit = "month")
reshape2::dcast(dd, change_author ~ month, value.var = "month", fun.aggregate = length)
#   change_author 2017-01-01 2017-03-01 2017-04-01
# 1          jane          1          0          1
# 2           joe          0          1          0

使用此输入:

dd = read.table(text = "document_id, change_id, change_author, doc_author, date
aaaaaaa, a1, joe, jessie, 3/15/17
aaaaaaa, a2, jane, jessie, 1/2/17
bbbbbbb, a1, jane, jack, 4/5/17", sep = ",", header = T)