我有一个具有商店,产品和日期的Summary_Table。我需要创建第4列,该列对在Summary_Table的每行中满足多个条件的Records_table中的观察次数进行计数。
这是我的汇总表。
> Summary_Table
Store Product Date
Chain1 ABC 1/1/2007
Chain1 ABC 1/1/2008
Chain1 ABC 1/1/2009
Chain1 ABC 1/1/2010
Chain1 DEF 1/1/2007
Chain1 DEF 1/1/2008
Chain1 DEF 1/1/2009
Chain1 DEF 1/1/2010
Chain2 ABC 1/1/2007
Chain2 ABC 1/1/2008
Chain2 ABC 1/1/2009
Chain2 ABC 1/1/2010
Chain2 DEF 1/1/2007
Chain2 DEF 1/1/2008
Chain2 DEF 1/1/2009
Chain2 DEF 1/1/2010
这是我的记录表
> Records_Table
Store Product Eval_Date
Chain1 DEF 2/13/2008
Chain2 ABC 1/15/2009
Chain1 DEF 5/13/2009
Chain2 ABC 3/15/2007
Chain1 DEF 5/14/2010
Chain2 DEF 10/10/2010
Chain1 ABC 11/1/2007
Chain2 ABC 10/1/2008
Chain2 DEF 6/1/2009
Chain2 DEF 7/1/2010
Chain2 ABC 8/1/2009
Chain1 ABC 2/1/2009
因此,我需要在“摘要”表中创建第4列,以对“记录”表中的观察次数进行计数。汇总表的每一行都满足以下条件。
商店应该相等,产品应该相等,并且对于日期;如果(Records_Table $ Eval_Date)大于(Summary_Table $ Date)。
所以我在Summary_Table中所需的输出是
> Summary_Table
Store Product Date Count
Chain1 ABC 1/1/2007 2
Chain1 ABC 1/1/2008 1
Chain1 ABC 1/1/2009 1
Chain1 ABC 1/1/2010 0
Chain1 DEF 1/1/2007 3
Chain1 DEF 1/1/2008 3
Chain1 DEF 1/1/2009 2
Chain1 DEF 1/1/2010 1
Chain2 ABC 1/1/2007 4
Chain2 ABC 1/1/2008 3
Chain2 ABC 1/1/2009 2
Chain2 ABC 1/1/2010 0
Chain2 DEF 1/1/2007 3
Chain2 DEF 1/1/2008 3
Chain2 DEF 1/1/2009 3
Chain2 DEF 1/1/2010 2
您可以left join
使用以下data.table
软件包:
library(data.table)
setDT(recdt)[,Eval_Date:=as.Date(Eval_Date,format="%m/%d/%Y")]
setDT(sumdt)[,Date:=as.Date(Date,format="%m/%d/%Y")]
recdt[sumdt,.N, on=c("Store","Product","Eval_Date>Date"), by=.EACHI]
输出-
Store Product Eval_Date N
1: Chain1 ABC 2007-01-01 2
2: Chain1 ABC 2008-01-01 1
3: Chain1 ABC 2009-01-01 1
4: Chain1 ABC 2010-01-01 0
5: Chain1 DEF 2007-01-01 3
6: Chain1 DEF 2008-01-01 3
7: Chain1 DEF 2009-01-01 2
8: Chain1 DEF 2010-01-01 1
9: Chain2 ABC 2007-01-01 4
10: Chain2 ABC 2008-01-01 3
11: Chain2 ABC 2009-01-01 2
12: Chain2 ABC 2010-01-01 0
13: Chain2 DEF 2007-01-01 3
14: Chain2 DEF 2008-01-01 3
15: Chain2 DEF 2009-01-01 3
16: Chain2 DEF 2010-01-01 2
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句