r语言 - 如何为数据创建箱然后计算 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来保留我的管道结构。

dplyrcumsum在这里很有帮助(另请参阅此答案(:

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)))