当 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
的示例中所述)
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
的示例中所述)