工作日计算的持续时间和 R 中的时间重叠

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

我有一张员工缺勤日期表。我需要计算每个员工的缺勤天数(工作日)。我有每个员工的多个记录。其中一些记录是重复的、嵌入的或与其他日期重叠的,或者只是完全独立的日期。我正在尝试编写一个函数来计算计算重叠和重复的天数(以工作日为单位)。我的数据看起来像这样

 ID<- as.factor(c(rep(1,3), rep(2,3), rep(3,3)))
Startdate= as.Date(c("1-1-2013", "1-4-2013", "2-2-2013", "3-3-2018", "3-2-2018", "4-5-2018",
         "7-5-2016","7-9-2016","7-15-2016"), format = "%m-%d-%Y" )
Enddate = c("1-17-2013", "1-19-2013", "2-13-2013", "3-9-2018", "3-13-2018", "4-18-2018","7-22-2016", " 7-21-2016", "8-3-2016")
df<- data.frame(ID, Startdate, Enddate)
   df$Startdate= as.Date(df$Startdate, format = "%m-%d-%Y")
df$Enddate= as.Date(df$Enddate, format = "%m-%d-%Y")
df

ID 开始日期结束日期 1 1-1-2013 1-17-2013
1 1-4-2013 1-19-2013
1 2-2-2013 2-13-2013
2 3-3-2018 3-9-2018
2 3-2-2018 3-13-2018
2 2018 年 4 月 5 日 2018 年 4 月 18 日
3 7-5-2016 7-22-2016
3 2016 年 7 月 9 日 2016 年 7 月 21 日
3 7-15-2016 8-3-2016

我可以使用此代码计算重叠和持续时间

    df$duration <- difftime(df$Enddate, df$Startdate , units= "days" )+1

# calculate overlap
df$overlap <- 0

for(i in 2:nrow(df)){
  samepat <- df$ID[i]==df$ID[i-1]
    curovl <- min(df$Enddate[i],df$Enddate[i-1]) - df$Startdate[i]+1
    if(curovl>0 & samepat) df$overlap[i] <- curovl
}

# aggregate duration and overlap
res <- aggregate(duration ~ ID, data=df, sum)
res$overlap <- aggregate(overlap ~ ID, data=df, sum)[,2]

# calculate corrected value
res$corrected <- res$duration - res$overlap

但我只需要计算工作日而不是总天数。我正在尝试使用 bizdays 包中的 bizdays 函数

library(bizdays)
cal <-  create.calendar(name = "mycal", weekdays=c("saturday", "sunday"))
df$duration <- bizdays(df$Startdate, df$Enddate, cal = "mycal")+1

任何想法??

r date overlap duration bizdays
© www.soinside.com 2019 - 2024. All rights reserved.