我想获得组织中的人数。我有约会的日期,每个人都在那里开始和结束他们的工作。
我想用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
这里是使用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)]
输出