0

我正在尝试按客户汇总销售报告并获取不同时间段的总销售额:

   Client   Q   Sales   Date
   A    2   30  01/01/2014
   A    3   24  02/01/2014
   A    1   10  03/01/2014
   B    4   10  01/01/2014
   B    1   20  02/01/2014
   B    3   30  03/01/2014

我可以使用以下方法由客户进行总结ddply

 rapport <- ddply(df, CLIENT, summarise, 
           Q = sum(Q), 
           Sales = sum(Sales) )

   Client   Q   Sales   
   A        6   64  
   B        7   60

我想添加一个额外的列,其中仅包含 03/01/2014 日期的销售额

Client   Q  Sales  Sales03/01/2014
   A     6  64      10
   B     7  60      30
4

2 回答 2

0
DF <- read.table(text="   Client   Q   Sales   Date
   A    2   30  01/01/2014
   A    3   24  02/01/2014
   A    1   10  03/01/2014
   B    4   10  01/01/2014
   B    1   20  02/01/2014
   B    3   30  03/01/2014", header=TRUE)

library(plyr)
ddply(DF, .(Client), summarise, 
      Q = sum(Q), 
      `Sales03/01/2014` = Sales[Date=="03/01/2014"],
      Sales = sum(Sales))

#  Client Q Sales03/01/2014 Sales
#1      A 6              10    64
#2      B 8              30    60

请注意,如果您希望 output 与 input 具有相同的名称,则此处的评估顺序很重要Sales。此外,最好避免使用无效语法的名称。

于 2014-06-10T15:48:39.447 回答
0

您还可以使用以下方法获得相同的结果dplyr

library(dplyr)

DF %>%
  group_by(Client) %>%
  summarise(SumOfQ = sum(Q) 
            `Sales03/01/2014` = Sales[Date=="03/01/2014"],
            SumOfSales = sum(Sales)) 

dplyr对于示例情况来说速度较慢,但​​对于大型数据帧来说要快得多。

于 2014-06-10T17:47:48.710 回答