【发布时间】:2020-12-18 16:00:43
【问题描述】:
我正在查看来自制造工厂的生产数据,需要根据一条生产线生产的瓶子大小对所有生产线的当天生产进行分类。基本设置是 FL 5S 生产线仅生产 5l 罐,FL 25 生产 25l 罐,FL 5 可生产 1l、3l 和 5l 罐。我需要一个名为“Recipe”的新列,它应该反映在 FL 5 上生产的所有订单与在 FL 5 上同时生产的订单的所有订单的大小。例如,如果 Size == "001" 在时间间隔 2020-04-28 08:46:56 UTC--2020-04-29 07:49:09 UTC 上Recipe 应该是 001 对于其他行产生的所有订单,其 Started 和 Ended 时间与 1l 订单的这些时间重叠。
数据:
library(tidyverse)
library(lubridate)
Prod_data_ex<-structure(list(Order = c(27380, 27388, 27395, 27381, 27389, 27382,
27396, 27397, 27393, 27392, 27383, 27384, 27385, 27386, 27398,
27409, 27410, 27411, 27412, 27416, 27420, 27421, 27417, 27418,
27432, 27433, 27419, 27413, 27399, 27414, 27415, 27428, 27424,
27429, 27431),
Prod_line = c("FL 5S", "FL 5", "FL 25", "FL 5S",
"FL 5", "FL 5S", "FL 25", "FL 5", "FL 5", "FL 5", "FL 5S", "FL 5S",
"FL 5S", "FL 5S", "FL 5", "FL 5S", "FL 5S", "FL 5S", "FL 5S",
"FL 25", "FL 5S", "FL 5S", "FL 25", "FL 25", "FL 5S", "FL 5S",
"FL 25", "FL 5S", "FL 5", "FL 5S", "FL 5S", "FL 5S", "FL 25",
"FL 5S", "FL 5"),
Produced = c(5400, 6373, 1440, 6372, 864, 5400,
288, 1080, 864, 5402, 3240, 864, 5293, 2700, 11547, 4427, 3672,
864, 2651, 96, 648, 1620, 96, 480, 2160, 1363, 480, 4320, 11528,
4320, 864, 12745, 600, 3782, 6373),
Size = c("005", "005", "025","005", "005", "005", "025", "005", "005", "005", "005", "005",
"005", "005", "001", "005", "005", "005", "005", "025", "005",
"005", "025", "025", "005", "005", "025", "005", "001", "005",
"005", "005", "025", "005", "005"),
Started = structure(c(1587969512, 1587970869, 1587972010, 1587984935, 1587998820, 1587999421, 1588003819,
1588004233, 1588008484, 1588013628, 1588014019, 1588022405, 1588024038,
1588062901, 1588063616, 1588070291, 1588076547, 1588083066, 1588085684,
1588090216, 1588093080, 1588094491, 1588094881, 1588100218, 1588101215,
1588105405, 1588105729, 1588110352, 1588146549, 1588147618, 1588155560,
1588157595, 1588172423, 1588179841, 1588180603), tzone = "UTC", class = c("POSIXct",
"POSIXt")), Ended = structure(c(1587984935, 1587998820, 1588003819,
1587999421, 1588004233, 1588014019, 1588090216, 1588008484, 1588013628,
1588063616, 1588022405, 1588024038, 1588062901, 1588070291, 1588146549,
1588076547, 1588083066, 1588085684, 1588093080, 1588094881, 1588094491,
1588101215, 1588100218, 1588105729, 1588105405, 1588110352, 1588172423,
1588147618, 1588180603, 1588155560, 1588157595, 1588179841, 1588188834,
1588191295, 1588241708), tzone = "UTC", class = c("POSIXct",
"POSIXt"))), row.names = c(NA, -35L), class = c("tbl_df", "tbl", "data.frame"))
这是我最接近工作的代码,但仍然不适用于其他行的订单。
Prod_data_recpies<- Prod_data_ex%>%
mutate(interval= interval(Started, Ended))%>%
mutate(recipe= ifelse(Size=="001", map_int(interval,~ any(int_overlaps(.x, interval[Size=="001"]))),
ifelse(Size=="003", map_int(interval,~ any(int_overlaps(.x, interval[Size=="003"]))), "005")))
谢谢!
【问题讨论】: