date value grp MR MR.avg avg lcl ucl
<date> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 2009-07-07 11.6 A NA 1.15 10.2 13.3 7.18
2 2009-07-08 10.1 A 1.51 1.15 10.2 13.3 7.18
3 2009-07-09 11.4 A 1.39 1.15 10.2 13.3 7.18
4 2009-07-10 10.5 A 0.932 1.15 10.2 13.3 7.18
5 2009-07-11 9.27 A 1.24 1.15 10.2 13.3 7.18
6 2009-07-12 9.95 A 0.688 1.15 10.2 13.3 7.18
7 2009-07-13 10.6 A 0.598 1.15 10.2 13.3 7.18
8 2009-07-14 10.1 A 0.415 1.15 10.2 13.3 7.18
9 2009-07-15 8.48 A 1.66 1.15 10.2 13.3 7.18
10 2009-07-16 10.4 A 1.90 1.15 10.2 13.3 7.18
11 2009-07-17 2.72 B NA 0.832 2.83 5.05 0.623
12 2009-07-18 1.44 B 1.27 0.832 2.83 5.05 0.623
13 2009-07-19 2.23 B 0.782 0.832 2.83 5.05 0.623
14 2009-07-20 3.03 B 0.809 0.832 2.83 5.05 0.623
15 2009-07-21 3.21 B 0.176 0.832 2.83 5.05 0.623
Line 8
моего кода ниже группирует каждое из трех распределений в одну из трех групп - «A», «B» или «C». Затем я перехожу к графику трех распределений с контрольными пределами , как показано далеко ниже.
library(tidyverse)
set.seed(55)
df <- tibble(
date = as.Date(40001:40030, origin = "1899-12-30"),
value = c(rnorm(10, 10), rnorm(10, 3), rnorm(10, 7))
) %>%
mutate(grp = c(rep("A", 10), rep("B", 10), rep("C", 10))) %>% # line 8
group_by(grp) %>%
mutate(
MR = abs(lag(value, 1) - value),
MR.avg = sum(MR, na.rm = TRUE) / (n() - 1),
avg = mean(value),
lcl = avg + (2.66 * MR.avg),
ucl = avg - (2.66 * MR.avg),
) %>%
print(n = 15)
p <- ggplot(df, aes(date, value, group = grp)) +
geom_line() +
geom_line(aes(date, lcl)) +
geom_line(aes(date, ucl))
p
Я взываю line 8
специально выше, с комментарием. Как видите, line 8
- это ручной процесс, который я хочу упростить с помощью аргумента split()
. Я хотел бы иметь возможность просто указать точку разделения, в данном случае 10-й / 11-й ряд и 20-й / 21-й ряд, с синтаксисом, который, я думаю, напоминает split(c(10, 20))
или, возможно, split(c(11, 21))
. Как правильно применить split()
или какую-либо другую функцию, подходящую для замены строки 8 чем-то лучшим?
Немного предыстории ... Я пишу это как функцию, и мне нужно предоставить пользователю простой интерфейс, в сущности что-то вроде split(c(point1, point2, etc))
, чтобы позволить пользователю разделять распределения на контрольной диаграмме . .