我是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
答案 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)