R多重标准中的SUMIF

时间:2014-07-01 11:29:17

标签: r

我有这样的数据框:

        Date Trade.Name            SKU Sales.in.USD Sum.Units Sales.in.Loc.currency
1 01.03.2010     Brand1 Brand1 CAPS 32      37994.9    4135.5             1123107.3
2 01.03.2010     Brand1 Brand1 CAPS 16      37918.5    5752.7             1167896.0
3 01.03.2010     Brand1 Brand1 CAPS 48      37875.0    2888.9             1245879.5
4 01.04.2010     Brand1 Brand1 CAPS 16      37192.4    6427.6             1099386.2
5 01.04.2010     Brand1 Brand1 CAPS 16      36591.8    5536.0             1073304.0
6 01.03.2010     Brand2 Brand2 CAPS 28          6.4       0.7                 207.4
7 01.03.2010     Brand2 Brand2 CAPS 28          6.4       0.7                 226.5
8 01.04.2010     Brand2 Brand2 CAPS 28          6.3       0.6                 195.4
9 01.04.2010     Brand2 Brand2 CAPS 28          6.3       0.6                 196.1

我希望通过SKU聚合它并获得如下数据框:

        Date Trade.Name Sales.in.USD    Sum.Units Sales.in.Loc.currency
1 01.03.2010     Brand1 113788.39180 113788.39180          113788.39180
2 01.04.2010     Brand1  73784.26045  73784.26045           73784.26045
3 01.03.2010     Brand2     12.71363     12.71363              12.71363
4 01.04.2010     Brand2     12.59949     12.59949              12.59949

我知道我可以使用dplyr套餐,但我不知道如何按多个标准对其进行汇总:DateSKU

2 个答案:

答案 0 :(得分:2)

http://cran.rstudio.com/web/packages/dplyr/vignettes/introduction.html

在下文中,我假设您的数据框名为df。

require(dplyr)

df <- group_by(df, Date, SKU)

df.summary <- summarise(df, 
              sales = sum(Sales.in.USD), 
              units = sum(Sum.Units), 
              curr = sum(Sales.in.Loc.currency)
              )

我认为这样做会有所帮助。

答案 1 :(得分:2)

由于您没有明确说明这必须是dplyr解决方案,因此这是一个data.table解决方案,速度很快

我也是,不要提供您的数据,因为您似乎在DateSKU之间有六个独特的组合,您希望的输出只显示四个。看来达到所需输出的唯一方法是使用Trade.Name列,所以这里是

library(data.table)
setDT(temp)[, lapply(.SD, sum), by = list(Date, Trade.Name), .SDcols = -c("SKU")]

结果是

##          Date       Trade.Name Sales.in.USD Sum.Units Sales.in.Loc.currency
## 1: 01.03.2010 Brand1Brand1CAPS     113788.4   12777.1             3536882.8
## 2: 01.04.2010 Brand1Brand1CAPS      73784.2   11963.6             2172690.2
## 3: 01.03.2010 Brand2Brand2CAPS         12.8       1.4                 433.9
## 4: 01.04.2010 Brand2Brand2CAPS         12.6       1.2                 391.5