当 Table 1 中的案例满足特定限制时,R:Count 中的案例使用 来自 Table 2 的事件数量

Case usage in R:Count number of events from Table 2 when case in Table 1 satisfy specific restrictions

Table1的DF是这样的:

df1 <- data.frame(ID = c('001','001','002','003', '003', '003'), 
                  date = c('2015-05-23', '2015-07-29', '2015-08-08', '2015-06-10', '2015-10-12', '2015-11-15'), 
                  date_last = c('2015-01-20', '2015-05-23', '2015-05-15', '2015-01-20', '2015-06-10', '2015-10-12'))

Table 2 的 DF 是这样的:

df2 <- data.frame(Event = c('A', 'B', 'C', 'D', 'E'), 
                  Event_date = c('2015-01-21', '2015-01-21', '2015-03-29', '2015-08-12', '2015-10-12'))

我想得到的是当df1$date_last < df2$Event_date < df1$date时的情况,然后将(事件)计数为1并总结该时间段内有多少事件.我想要的理想结果如下:

df3 <- data.frame(ID = c('001','001','002','003', '003', '003'), 
                  date = c('2015-05-23', '2015-07-29', '2015-02-08', '2015-06-10', '2015-10-12', '2015-11-15'), 
                  date_last = c('2015-01-20', '2015-05-23', '2015-05-15', '2015-01-20', '2015-06-10', '2015-10-12'), 
                  number_of_events = c(3,1,0,3,1,0))

有人知道这个的 R 代码吗?非常感谢!

确保所有日期都是 class 日期。您只需在创建数据框时将 as.Date() 放在列周围即可。

首先定义一个函数,x 是一个分别包含结束日期和开始日期的向量,y 是一个包含应检查日期的向量。

nr_events_in_between <- function(x, y) sum(x[2] < y & x[1] > y)

将此应用于 df1 中的所有行,您将获得 number_of_events 列。

apply(df1[ ,c('date', 'date_last')], 1, nr_events_in_between,  df2[,'Event_date'])

(请注意,对于第二行,值是 0 而不是 1,正如您在 df3 的示例中所述)