У меня есть набор данных из клинического испытания, и я пытаюсь рассчитать оценки изменений (изменение от исходного уровня до конца испытания) для нескольких переменных. Каждый пациент (id) проходил тестирование в начале исследования (неделя == 0 и еще три момента времени с использованием нескольких тестов).
Мои оценки изменений должны включать условные выражения, которые учитывают переменную dropout, чтобы:
ЕСЛИ их балл отсева равен 9 (= не выпал), результат изменения: (оценка на неделе == 24) - (оценка на неделе == 0).
ЕСЛИ их рейтинг отсева составляет 6 или 7, то оценка изменения: (оценка на неделе == 16) - (оценка на неделе == 0).
Я могу сделать это для каждой переменной за раз, но хотел бы написать функцию, которая делает это для всех переменных с именами, заканчивающимися на .tot
(PS. Мой реальный набор данных содержит недостающие данные, так что использование lag () и сумма результатов lag () не работает)
Упрощенный пример моего набора данных плюс то, как я до сих пор рассчитывал оценки изменений для одной переменной за раз:
id <- rep(c(1, 2, 3, 4, 5, 6, 7, 8, 9), each = 4)
week <- rep(c(0, 8, 16, 24), 9)
dropout <- rep(c(9, 6, 7, 4, 1, 7, 9, 9, 9), each = 4)
dep.tot <- sample(0:30, 36, replace = TRUE)
np.hx.tot <- sample(0:30, 36, replace = TRUE)
cmai.tot <- sample(0:30, 36, replace = TRUE)
mydf <- data.frame(id, week, dropout, dep.tot, np.hx.tot, cmai.tot)
mydf <- mydf %>% group_by(id) %>% mutate(dep.tot.change = ifelse(dropout == 9,
dep.tot[week== 24] - dep.tot[week == 0],
ifelse(dropout == 6 | dropout == 7,
dep.tot[week == 16] - dep.tot[week == 0], NA)))
Пробовал различные комбинации базовых функций, apply, dplyr :: mutate и purrr :: modify, но, похоже, я не могу правильно выполнить индексацию даже на ранних этапах создания функции.