对于从SQL查询填充的数据框,如下所示:
Company Month Total_Count
ABC 2012-03 10
ABC 2009-01 1
DEF 2011-01 29
GHI 2001-09 10
GHI 2008-01 9
GHI 2010-09 100
我想提出一个可以输出的摘要报告:
Company Total Months
ABC 11 10 1
DEF 29 29
GHI 119 10 9 100
其中列Total
将是所有月份的总和
列Months
将是该组织遇到的每个月的个别计数。我很想看看是否有可能以某种方式挤压实际月份。类似的东西:
Company Total Months
2009-01 2012-03
ABC 11 10 1
2011-01
DEF 29 29
2001-09 2008-01 2010-09
GHI 119 10 9 100
到目前为止,我只能通过以下方式获得上述所需结果的前两列:
df1 <- ddply(resultSet, .(company_name), summarize, sum(as.numeric(total_count)))
但我不确定如何为个别月份附加信息
答案 0 :(得分:1)
library(reshape2)
res <- ddply(resultSet, .(Company), summarize, Total = sum(Total_Count))
# if value.var is not specified, dcast uses the last column. see ?guess_value
months <- dcast(resultSet, Company ~ Month, value.var = "Total_Count", sum)
join(res, months, by = "Company")
Company Total 2001-09 2008-01 2009-01 2010-09 2011-01 2012-03
1 ABC 11 NA NA 1 NA NA 10
2 DEF 29 NA NA NA NA 29 NA
3 GHI 119 10 9 NA 100 NA NA
在问题的上下文中具有聚合函数是很重要的。
答案 1 :(得分:0)
由于你没有给它任何名字我选择了“cdf”
agg1 <- aggregate(namcounts, cdf['Company'], function(x) sumC=sum(x) )
aggC <- lapply( split(namcounts, cdf['Company']), function(x) listC= list(x) )
agg1$clist <- sapply(aggC, "[[" ,1)
agg1
Company x clist
1 ABC 11 10, 1
2 DEF 29 29
3 GHI 119 10, 9, 100
另一种记录方法是使用分隔符粘贴月份计数。目前这些都存储为列表。