Связывание словаря данных в R - PullRequest
0 голосов
/ 03 августа 2020

У меня есть два фрейма данных, как показано ниже.

  • Я хотел обновить patients фрейм данных
  • и заменить Option_name на Option_num для всех.
## dataframe
patid = c(1, 2, 3, 4, 5, 6, 7, 8, 9) 
technique = c("VMAT", "IMRT", "ELEC", "VMAT", "VMAT", "VMAT", "ELEC", "VMAT", "IMRT")
intent = c("Radical", "Curative", "Adjuvant", "Curative", "Curative", "Curative", "Curative", "Curative", "Adjuvant")
patients = data.frame(patid, technique, intent)
## data dictionary
variable = c("technique", "technique", "technique", "intent", "intent", "intent")
Option_name = c("VMAT", "IMRT", "ELEC", "Radical", "Curative", "Adjuvant")
Option_num = c(1, 2, 3, 1, 2, 3)
dict = data.frame(variable, Option_name, Option_num)

Таким образом, кадр данных patients изменится ИЗ from

TO
to

I know how to do this via a very manual process:

patients$technique <- replace(as.character(patients$technique), patients$technique == "VMAT",1)

Но я уверен, что есть более эффективный способ сделать это.

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

1 голос
/ 03 августа 2020

Вы можете попробовать это:

library(dplyr)
library(purrr)
patients %>%
    mutate(across(c(technique, intent), 
                  ~map(as.character(.), 
                       ~dict$Option_num[which(dict$variable == cur_column() & dict$Option_name == .)])))

или полностью tidyverse вариант:

library(dplyr)
library(purrr)
patients %>%
    mutate(across(c(technique, intent), 
                  ~map(as.character(.), 
                       ~pull(filter(dict, 
                                    variable == cur_column(), 
                                    Option_name == .x), 
                             Option_num))))
0 голосов
/ 03 августа 2020

Это наверняка будет не самое элегантное решение, но я не смог придумать ничего другого.

for (a in c("technique", "intent")) {
  # go through the columns
  for (b in unique(patients[, a])) {
    # go through the Option_name
    patients[patients[, a] == b, a] <- dict[dict[, "variable"] == a & dict[, "Option_name"] == b, "Option_num"]
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...