Как создать бункеры для данных, а затем рассчитать ecdf?

У меня есть фреймворк (см. Ниже) с 4 частями на машину и временем выполнения для каждой части. Я хотел бы разделить время выполнения по ячейкам каждые 50 часов, а затем рассчитать эмпирическую вероятность времени выполнения.

Я попытался расширить сетку, чтобы получить бункеры, но я думаю, что она слишком сильно повторяет это, и вероятность завышена.

library(tidyverse)
set.seed(1)
data <- tibble(piece = rep(c("A", "B", "C", "D"), 1000),
               machine = rep(c("Mach1", "Mach2"), times = c(1200, 2800)),
               time = runif(4000, 0, 1000))

Я ожидаю, что результат будет выглядеть примерно так (обратите внимание, что эти вероятности не будут соответствовать данным, приведенным выше).

piece   machine     time    prob
A       Mach1       50      .03
A       Mach1       100     .04
A       Mach1       150     .09
A       Mach1       200     .12
...
A       Mach1       1000    1.0
...
B       Mach1       50      .05
B       Mach1       100     .11
B       Mach1       150     .12
B       Mach1       200     .14
...
B       Mach1       1000    1.0
.
.
.
A       Mach2       50      .02
A       Mach2       100     .05
...
B       Mach2       50      .06
B       Mach2       100     .10
...

Я хотел бы использовать dplyr, если возможно, чтобы сохранить структуру канала.


person jackbio    schedule 15.08.2019    source источник


Ответы (1)


dplyr cumsum здесь полезен (см. Также этот ответ):

data.ecdf = data %>%
  mutate(time = ceiling(time / 50) * 50) %>%
  group_by(piece, machine, time) %>%
  summarize(num.runs = n()) %>%
  ungroup() %>%
  group_by(piece, machine) %>%
  arrange(machine, piece, time) %>%
  mutate(prob = cumsum(num.runs / sum(num.runs)))
person A. S. K.    schedule 16.08.2019