使用日期格式列操作数据框 - R

时间:2012-09-12 20:58:32

标签: r plyr

对于从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)))

但我不确定如何为个别月份附加信息

2 个答案:

答案 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

另一种记录方法是使用分隔符粘贴月份计数。目前这些都存储为列表。