У меня есть некоторые методы лечения (A, B, C, D
и т. Д.) С 4 состояниями (z, y, x, v
и т. Д.) И суммой раз, когда они использовались для пациентов (строки).
Пример:
treatments = tibble(treatment = rep(c("A","B","AB"), 4),
condition = rep(c("z","y","x","v"),3),
n_times_used = 10:21) %>%
arrange (treatment)
Иногда применяется также комбинированное лечение АБ.
Я хочу написать функцию, которая:
1. Проверяет, присутствует ли комбинированная обработка AB в текущем наборе данных
2. Если да, я хочу, чтобы номера AB добавлялись как к номерам «A», так и к номерам «B», но только в отношении condition
. После добавления AB следует удалить из набора данных
Например: в прошлом месяце у меня было 100 пациентов с Az
(лечение A
, состояние z
), 150 пациентов с Bz
, 40 пациентов с Cz
и 70 пациентов с ABz
. Таким образом, числа, которые я хочу в моей обобщенной таблице, являются Az = 170; Bz = 220, Cz = 40
.
Я пытаюсь построить что-то вроде
treatments %>%
{stopifnot(any(.$treatment == "AB", na.rm = T))} %>%
group_by(condition) %>%
mutate(n_times_used = if_else(treatment=="A",
true = sum(n_times_used[which(.$treatment== "A")], n_times_used[which(.$treatment== "AB")]),
false = n_times_used))
То же самое с B + AB, а затем фильтр, чтобы удалить AB из таблицы. Все еще есть ошибки в коде ...
ОБНОВЛЕНИЕ 1. Пример с лечением C
Я добавляю еще один пример, потому что в первом были включены только процедуры A
и B
. Если у нас есть лечение C
, мне не нужно добавлять AB
к нему.
treatments_ABC = tibble(treatment = rep(c("A","B","AB","C"), 3),
condition = rep(c("z","y","x"), 4),
n_times_used = round(abs(rnorm(n = 12, mean = 10, sd = 30)))) %>%
arrange (treatment)
ОБНОВЛЕНИЕ 2. Пример с обработкой A
или B
отсутствует
treatments_BC = tibble(treatment = rep(c("B","AB","C"), 4),
condition = rep(c("z","y","x","v"), 3),
n_times_used = round(abs(rnorm(n = 12, mean = 10, sd = 30)))) %>%
arrange (treatment)