我有一个带有中断日期的整体开始日期和结束日期,我希望创建多个显示实际工作日期的时间序列数据条目,这意味着我将使用按ID分组的序列开始和结束日期,并在中间使用中断日期……有没有比使用循环更简单的方法来完成这项工作?

我拥有的数据:

ID     Start       Finish      Break_start     Break_Finish     Break_Number
a      01-01-20    03-05-20    29-04-20        01-05-20         1
b      20-09-19    01-04-22    12-11-19        05-12-19         1
b      20-09-19    01-04-22    05-08-20        25-08-20         2

需要的数据

ID    Start_new       Finish_new
a     01-01-20        28-04-20
a     01-05-20        03-05-20
b     20-09-19        11-11-19
b     05-12-19        04-08-20
b     25-08-20        01-04-22

谢谢!

推荐答案

对于dplyr,您可以用ID对数据进行汇总,以获得每个持续时间的开始日期和结束日期.

library(dplyr)

df %>%
  mutate(across(2:5, as.Date, "%d-%m-%y")) %>%
  group_by(ID) %>%
  summarise(Start_new = c(first(Start), Break_Finish),
            Finish_new = c(Break_start - 1, first(Finish))) %>%
  ungroup()

# # A tibble: 5 × 3
#   ID    Start_new  Finish_new
#   <chr> <date>     <date>    
# 1 a     2020-01-01 2020-04-28
# 2 a     2020-05-01 2020-05-03
# 3 b     2019-09-20 2019-11-11
# 4 b     2019-12-05 2020-08-04
# 5 b     2020-08-25 2022-04-01

R相关问答推荐

如何在球体上绘制轮廓线?

保存shiny 的代码嗅探器:避免$ Symbol问题

如何判断某列中由某些行组成的百分比

使用lapply的重新定位功能

在特定列上滞后n行,同时扩展框架的长度

geom_Ribbon条件填充创建与数据不匹配的形状(ggplot 2 r)

在(g)子中使用asserable字符

R中具有gggplot 2的Likert图,具有不同的排名水平和显示百分比

使用gggrassure减少地块之间的空间

根据选中三个复选框中的一个或两个来调整绘图

如何动态更新selectizeInput?

如何计算多个日期是否在一个日期范围内

如何通过判断数据框的一列来压缩另一列?

有没有可能用shiny 的书签恢复手风琴面板?

如何计算R glm probit中的线性预测因子?

正则表达式在第二个管道和第二个T之后拆分R中的列

R如何将列名转换为更好的年和月格式

名字的模糊匹配

如何在刻面和翻转堆叠条形图中对齐geom_text()

使用dqur在不同变量上创建具有多个条件的变量