Пожалуйста, примите во внимание следующее.
Фон
В data.frame
у меня есть идентификаторы пациента (id
), деньв котором пациенты поступают в больницу (day
), код диагностической активности, полученной ими в тот день (code
), цена этой активности (price
) и частота этой активности (freq
).
Действия с code
b
и c
регистрируются одновременно, но означают более или менее одно и то же и не должны учитываться дважды.
Проблема
Что я хочу, это: если code
"b" и "c" зарегистрированы для одного и того же дня , code
"b" следует игнорировать.
Пример data.frame
выглядит следующим образом:
x <- data.frame(id = c(rep("a", 4), rep("b", 3)),
day = c(1, 1, 1, 2, 1, 2, 3),
price = c(500, 10, 100, rep(10, 3), 100),
code = c("a", "b", "c", rep("b", 3), "c"),
freq = c(rep(1, 5), rep(2, 2))))
> x
id day price code freq
1 a 1 500 a 1
2 a 1 10 b 1
3 a 1 100 c 1
4 a 2 10 b 1
5 b 1 10 b 1
6 b 2 10 b 2
7 b 3 100 c 2
Таким образом, затраты для пациента "a" для первого дня будут 600, а не 610 какЯ могу вычислить следующее:
x %>%
group_by(id, day) %>%
summarise(res = sum(price * freq))
# A tibble: 5 x 3
# Groups: id [?]
id day res
<fct> <dbl> <dbl>
1 a 1. 610.
2 a 2. 10.
3 b 1. 10.
4 b 2. 20.
5 b 3. 200.
Возможные подходы
Либо я удаляю наблюдение code
"b", когда«с» присутствует на том же самомдень или я установил freq
из code
"b" в 0 в случае, если code
"c" присутствует в тот же день.
Все мои попытки с ifelse
и mutate
потерпели неудачу, поэтомудалеко.
Каждая помощь очень ценится.Заранее большое спасибо!