我需要帮助.我有一些数据看起来与此类似.

   Machine   Start      Stop           ServiceType 
1       XX 2014-12-04       <NA>          AA
2       XX 2013-09-05 2013-11-05          BB
3       XX 2013-11-21 2014-09-25          BB
4       XX 2013-10-11 2014-11-18          BB
5       XX 2021-12-03       <NA>          AA
6       XX 2020-08-06 2022-09-15          AA
7       XX 2021-06-10       <NA>          BB
8       YY 2020-01-17       <NA>          BB
9       YY 2015-11-04 2018-04-30          BB
10      YY 2016-05-28 2019-03-21          BB
11      YY 2019-09-27       <NA>          BB
12      YY 2018-01-05       <NA>          AA

所以我想做的是生成一个新的变量,比如维护之类的,如果只有一种服务类型是活动的,则为AABB,如果AABB都重叠,则为CC.喜欢

   Machine   Date          Maintenance        
1       XX 2013-09-05          BB
2       XX 2013-11-21          BB
3       XX 2013-10-11          AA
4       XX 2014-12-04          CC   
5       XX 2021-12-03          AA
6       YY 2015-11-04          BB
7       YY 2016-05-28          CC
8       YY 2020-01-17          BB

我一直在使用dplyrlubridate,但我有点不确定如何执行这项任务,任何帮助都会很好.

在这种情况下,ps.NA可以被视为一台机器永远在该服务上.

推荐答案

在你的问题中有一些不一致之处(一些变量确实重叠,但在你的预期输出中它们被认为是独立的),下面是一种通过重叠值进行分组的方法,并从某种程度上获得你的预期输出.此解决方案使用ivstidyverselubridate库:

library(ivs)
library(tidyverse)
library(lubridate)

df %>% 
  mutate(Stop = ifelse(Stop == "<NA>", Start, Stop),
         across(c(Start, Stop), ymd),
         Stop = if_else(Stop == Start, Stop + days(1), Stop),
         ivs = iv(Start, Stop)) %>% 
  group_by(Machine, gp = iv_identify_group(ivs)) %>% 
  summarise(ServiceType = toString(unique(ServiceType)),) %>% 
  ungroup() %>% 
  mutate(gp = iv_start(gp),
         ServiceType = ifelse(ServiceType %in% c("BB, AA", "AA, BB"), "CC", ServiceType))

# A tibble: 6 × 3
  gp         Machine ServiceType
  <date>     <chr>   <chr>      
1 2013-09-05 XX      BB         
2 2014-12-04 XX      AA         
3 2020-08-06 XX      CC         
4 2015-11-04 YY      CC         
5 2019-09-27 YY      BB         
6 2020-01-17 YY      BB         

数据

df <- read.table(header = T, text = "   Machine   Start      Stop           ServiceType 
1       XX 2014-12-04       NA          AA
2       XX 2013-09-05 2013-11-05          BB
3       XX 2013-11-21 2014-09-25          BB
4       XX 2013-10-11 2014-11-18          BB
5       XX 2021-12-03       <NA>          AA
6       XX 2020-08-06 2022-09-15          AA
7       XX 2021-06-10       <NA>          BB
8       YY 2020-01-17       <NA>          BB
9       YY 2015-11-04 2018-04-30          BB
10      YY 2016-05-28 2019-03-21          BB
11      YY 2019-09-27       <NA>          BB
12      YY 2018-01-05       <NA>          AA
")

R相关问答推荐

混淆矩阵,其中每列和等于1

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

如何将旋转后的NetCDF转换回正常的纬度/经度网格,并使用R?

计算时间段的ECDF(R)

从BRM预测价值

使用Facet_WRAP时更改框图中线的 colored颜色

无法正确设置动态创建的Quarto标注的格式

plotly hover文本/工具提示在shiny 中不起作用

有没有一种方法可以同时对rhandsontable进行排序和从rhandsontable中删除?

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

我们如何在R中透视数据并在之后添加计算

如何在ggplot2中创建多个y轴(每个变量一个)

ggplot R:X,Y,Z使用固定/等距的X,Y坐标绘制六边形热图

是否有可能从边界中找到一个点值?

使用同一行中的前一个值填充R矩阵中的缺失值

我怎么才能把一盘棋变成一盘棋呢?

R,将组ID分配给另一个观测ID变量中的值的组合

在具有条件的循环中添加行

对计算变量所有唯一值的变量进行变异

如何修改Rust中的R字符串并将其赋给新的R变量,并使用extendr保留原始R字符串