首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用多个分组变量创建数据帧

使用多个分组变量创建数据帧
EN

Stack Overflow用户
提问于 2015-10-01 19:11:28
回答 1查看 67关注 0票数 2

我有一个包含变量的表: OrderPostingYear、OrderPostingMonth、ProductsFamily、Sales、QTY。现在,我想要创建一个dataframe来显示一个表,其中行作为每个ProductFamily (分组),列作为每个OrderPosting年份&OrderPostingMonth(分组),值是销售之和。我该怎么做?

代码语言:javascript
复制
>ProductTable
 OrderPostingYear OrderPostingMonth ProductsFamily Sales QTY
2008               1                 R1            5234   1
2008               1                 R2            223    2
2009               1                 R3            34     1 
2008               2                 R1            1634   3
2010               4                 R3            224    1 

结果应该是:

代码语言:javascript
复制
>PFTable
      2008-1 2008-2 2009-1 2010-4
R1     5234    1634    0     0
R2     223     0       0     0
R3     0       0       34    224

我想在dplyr中使用group_by和summarise_each,而不是成功。需要帮助求你了。谢谢!

代码语言:javascript
复制
PFTable<-data.frame(ProductTable%>%
                   group_by(ProductFamily) %>%                                summarise_each(.,funs(sum(SalesVolume,na.rm=TRUE)),group_by(OrderPostingYear,OrderPostingMonth)))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-01 19:13:57

我们可以使用acast将'long‘转换为'wide’格式。

代码语言:javascript
复制
library(reshape2)
acast(ProductTable, ProductsFamily~OrderPostingYear+OrderPostingMonth, 
             value.var='Sales', fill=0) 
#   2008_1 2008_2 2009_1 2010_4
#R1   5234   1634      0      0
#R2    223      0      0      0
#R3      0      0     34    224

如果我们想使用dplyr/tidyr,那么unite的'OrderPostingYear‘和'OrderPostingMonth',删除'QTY’和spread,从'long‘重塑为'wide’。

代码语言:javascript
复制
library(dplyr)
library(tidyr)
unite(df1, OrderMonth, OrderPostingYear, OrderPostingMonth, sep="-") %>%
               select(-QTY) %>%
               spread(OrderMonth, Sales)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32895100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档