Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中data.frame中的日期重叠_R_Date_Overlap - Fatal编程技术网

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,这是我的一个错误。谢谢你的帮助。它起作用了!