从开始日期和结束日期开始,获取每个日期的数字

问题描述 投票:0回答:1

我想获得组织中的人数。我有约会的日期,每个人都在那里开始和结束他们的工作。

我想用R来做,如果可能的话,可以使用tidyverse方法

示例:

Person Start End
John 01/01/1990 01/07/1992
Eve  12/27/1991 12/31/1992

这应该给:

Date People
12/31/1989 0
01/01/1990 1
01/02/1990 1
...
12/27/1991 2
12/38/1991 2
...
01/07/1992 2
01/08/1992 1
...
12/31/1992 1
01/01/1993 0
r tidyverse
1个回答
0
投票

这里是使用data.table::foverlaps()的方法

#load libraries
library(data.table)
library(lubridate)

#create sample data
DT <- fread("Person Start End
John 01/01/1990 01/07/1992
Eve  12/27/1991 12/31/1992")
#set dates as POSIXct timestamps
DT[, `:=`( Start = as.POSIXct( Start, format = "%m/%d/%Y", tz = "UTC" ),
           End   = as.POSIXct( End, format = "%m/%d/%Y", tz = "UTC" ) ) ]

#create table with all days in periods from DT
DT.dates <- data.table( from = seq( min( DT$Start ), max( DT$End ), by = "1 day" ) )
DT.dates[, to := from %m+% days(1) - 1 ]

#set keys
setkey( DT, Start, End )
setkey( DT.dates, from, to )

#perform overlap join and summarise
ans <- foverlaps( DT, DT.dates )[, .(People = uniqueN( Person ) ), by = (Date = from)]

输出

© www.soinside.com 2019 - 2024. All rights reserved.