R:在数据帧中按行统计满足多个条件的观察值

R:在数据帧中按行统计满足多个条件的观察值,r,R,我有一个汇总表,其中包含存储、产品和日期。我需要创建一个第四列,统计记录表中满足汇总表每行多个条件的观察数 这是我的汇总表 > 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/200

我有一个汇总表,其中包含存储、产品和日期。我需要创建一个第四列,统计记录表中满足汇总表每行多个条件的观察数

这是我的汇总表

> 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
所以我需要在汇总表中创建第四列,统计记录表中的观察数。符合汇总表每行以下条件的

商店应该是平等的,产品应该是平等的,并为日期;如果(记录表$Eval\u日期)大于(汇总表$Date)

因此,汇总表中所需的输出是

> 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

我假设汇总表中的日期列是按年份分组的。如果是,使用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()) %>% 
库(dplyr)
图书馆(lubridate)
记录%
变异(评估日期=mdy(评估日期),年份=年份(评估日期))
汇总%
分组依据(商店、产品、年份)%>%
汇总(计数=n())%>%

您可以使用
数据进行
左连接

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

这可能最好通过第一次合并来解决。我认为比较这两个数据集中的日期会有点棘手,尽管可能,但它们有共同的列。两个表格是否总是有相同的行?请使用
dput(摘要表格)
dput(摘要表格)