R中data.frame中的日期重叠
我试图在我的数据框中基于日期重叠创建一个新变量 我的R中data.frame中的日期重叠,r,date,overlap,R,Date,Overlap,我试图在我的数据框中基于日期重叠创建一个新变量 我的数据如下所示 People Company Start End 1 Person1 CompanyA 2017-04-27 2019-12-31 2 Person2 CompanyB 2017-04-27 2019-08-30 3 Person3 CompanyA 2013-04-27 2019-12-31 4 Person4 CompanyB 2
数据
如下所示
People Company Start End
1 Person1 CompanyA 2017-04-27 2019-12-31
2 Person2 CompanyB 2017-04-27 2019-08-30
3 Person3 CompanyA 2013-04-27 2019-12-31
4 Person4 CompanyB 2017-04-27 2019-12-31
5 Person5 CompanyC 2016-05-13 2019-12-31
我想检查每个人是否在以下日期在公司
2016-12-31
2017-12-31
2018-12-31
2019-12-31
...
我正在使用DescTools
库中的%overlaps%
。如果我只检查数据中的一行
c(data$Start[1], data$End[1]) %overlaps% dates[1]
它返回我所期望的TRUE
(或者在其他情况下返回FALSE
)。但是我想知道每一行的这一点,并将其保存在变量数据$y2017
,数据$y2018
,数据$y2019
等中。但我在这方面遇到了问题
因为如果我只是尝试在每一行上执行此操作,它将不起作用,只为每一行返回NA
。例如,如果我想看看谁在2016-12-31的
data$y2016 <- c(data$Start, data$End) %overlaps% dates[1]
data$y2016这里是一个data.table方法
此解决方案的核心是data.table::foverlaps()
-用于检查DT.dates
data.table是否在DT
中的开始-结束间隔内的函数
library(data.table)
# Sample data
DT <- fread(" People Company Start End
Person1 CompanyA 2017-04-27 2019-12-31
Person2 CompanyB 2017-04-27 2019-08-30
Person3 CompanyA 2013-04-27 2019-12-31
Person4 CompanyB 2017-04-27 2019-12-31
Person5 CompanyC 2016-05-13 2019-12-31")
DT[, Start := as.Date(Start)]
DT[, End := as.Date(End)]
DT.dates <- data.table( Start = as.Date(c("2016-12-31","2017-12-31","2018-12-31","2019-12-31")),
End = as.Date(c("2016-12-31","2017-12-31","2018-12-31","2019-12-31")))
# Set keys
setkey(DT, Start, End)
setkey(DT.dates, Start, End)
# Perform overlapjoin and cast to wide
dcast(foverlaps(DT.dates, DT), People + Company + Start + End ~ i.Start,
value.var = "i.Start", fun.aggregate = length)
# People Company Start End 2016-12-31 2017-12-31 2018-12-31 2019-12-31
# 1: Person1 CompanyA 2017-04-27 2019-12-31 0 1 1 1
# 2: Person2 CompanyB 2017-04-27 2019-08-30 0 1 1 0
# 3: Person3 CompanyA 2013-04-27 2019-12-31 1 1 1 1
# 4: Person4 CompanyB 2017-04-27 2019-12-31 0 1 1 1
# 5: Person5 CompanyC 2016-05-13 2019-12-31 1 1 1 1
库(data.table)
#样本数据
DT我遵循了您的代码,但当我运行“设置键(DT,开始,结束)”时,它将一些日期(例如2017-04-27)替换为NA。Nevermind,这是我的一个错误。谢谢你的帮助。它起作用了!