使用dplyr

时间:2018-06-19 09:42:34

标签: r dplyr

我正在处理一个使用RODBC从数据库中提取的大型数据集。我想要做的是以更易于管理的方式聚合这些数据。到目前为止,我有一个df看起来像这样:

head(commercials)
ReportPeriod Year Customer  CustomerNumber TradingGroup ItemCode ItemDesc Vol
1 2018-01    2018 Ted's Bar 1234           Ted's PLC    1        Packing  50
2 2018-01    2018 Ted's Res 4567           Ted's PLC    1        Packing  100
3 2018-02    2018 Ted's Bar 1234           Ted's PLC    1        Packing  60
4 2018-02    2018 Ted's Res 4567           Ted's PLC    1        Packing  120

上述字段中还有其他变量与我不感兴趣的其他项目和客户信息以及我的销售价值,购买价值和毛利等变量相关。

我想删除所有我不感兴趣的变量,并按TradingGroup汇总所有数据,这样我就可以看到TradingGroup的所有销售额的总和,而不是单个客户。因此,第二个dfTradingGroup变量的不同值分组。我希望能够从第一个df中汇总所有价值,销售价值等值,并将它们追加到第二个df的末尾

head(CTG)
  TradingGroup     Channel     ItemCode ItemDes Vol
1 Ted's PLC        Hospitality 1        Packing ?

我以为我可以使用某种left_join()来执行此操作,如下所示:

CTGcommercials<-left_join(CTG,commercials)%>%group_by(TradingGroup,Channel,ItemCode,ItemDesc)%>%
        summarize(sum=n())

这种方法肯定有效,因为我在类似场景中使用计数尝试了这种方法,但是附加到第二个df末尾的列并不是我所期望的。 vol列中的值应聚合为一行:

50 + 100 + 60 + 120 = 330

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

这是使用tidyverse的一种方式

library(tidyverse)

commercial %>% select(TradingGroup, Vol) %>%
group_by(TradingGroup) %>% summarize(vol = sum(vol)) %>%
left_join(CTG, ., by = "TradingGroup")