У меня есть следующий фрейм данных, содержащий код лекарства в зависимости от пути введения:
code <- data.frame(inn = c("ibuprofen", "ibuprofen", "ibuprofen", "fusidic acid", "fusidic acid"),
route = c("unknown", "unknown", "unknown", "oral", "topical"),
atc = c("R02AX02", "G02CC01", "M01AE01", "J01XC01", "D06AX01"))
inn route atc
1 ibuprofen unknown R02AX02
2 ibuprofen unknown G02CC01
3 ibuprofen unknown M01AE01
4 fusidic acid oral J01XC01
5 fusidic acid topical D06AX01
И еще один, содержащий лечение пациента и событие:
event <- data.frame(id = c(1, 1, 2),
inn = c("ibuprofen", "fusidic acid", "fusidic acid"),
route = c("unknown", "oral", "topical"),
event = c(TRUE, FALSE, TRUE))
id inn route event
1 1 ibuprofen unknown TRUE
2 1 fusidic acid oral FALSE
3 2 fusidic acid topical TRUE
Мне нужно объединитьэти кадры данных, чтобы получить следующий результат:
inn route id event atc
1 fusidic acid oral 1 FALSE J01XC01
2 fusidic acid topical 2 TRUE D06AX01
3 ibuprofen unknown 1 TRUE NA
Я не получаю этот результат с простым merge
:
merge(x = event,
y = code)
inn route id event atc
1 fusidic acid oral 1 FALSE J01XC01
2 fusidic acid topical 2 TRUE D06AX01
3 ibuprofen unknown 1 TRUE R02AX02
4 ibuprofen unknown 1 TRUE G02CC01
5 ibuprofen unknown 1 TRUE M01AE01
Я думал о двух решениях, но я не сделалудается реализовать любое:
- изменить кадр данных
code
перед merge
, чтобы установить atc
на NA
, если есть разные atc
для группы inn
иroute
(это кажется более уместным) - изменить результат
merge
для установки atc
на NA
, если есть разные atc
для группы inn
, route
иid
Как я могу сделать это в базе R?Есть ли другой лучший способ?Я работаю в ограничительной среде, где у меня есть доступ только к базе R.