我有一个包含商店,产品和日期的Summary_Table。我需要创建第4列,计算Records_table中每个Summary_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
所以我需要在Summary表中创建第4列,用于计算Records表中的观察数。这符合汇总表每行的以下标准。
商店应该是平等的,产品应该是平等的,并且对于日期;如果(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
我假设您的汇总表中的日期列是按年分组。如果是这样,使用lubridate和dplyr:
library(dplyr)
library(lubridate)
Records <- Records %>%
mutate(Eval_Date = mdy(Eval_Date), Year = year(Eval_Date))
summary <- Records %>%
group_by(Store, Product, Year) %>%
summarise(Count = n()) %>%