Как создать функцию для повторения case_when - PullRequest
0 голосов
/ 26 января 2019

Фон

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

Список содержит медицинские диагнозы. Я хочу преобразовать эти диагнозы в коды.

В каждом списке будет один код, извлеченный в столбец первичной диагностики, затем следующий диагноз будет извлечен в столбец вторичной диагностики, а затем третий. Каждый раз, когда диагноз совпадает с тем, что находится в списке, этот элемент удаляется из списка.

Проблема

Мне приходится повторять case_when каждый раз, когда я перебираю список, и я хотел бы иметь возможность ссылаться на список, а не повторять его каждый раз

Пример:

structure(list(myDx = list("Normal Study", c("There is Barretts with two things", 
"everywhere", " Four biopsies taken"
), c("Mitotic lesion", " Barretts", 
"Hiatus hernia", "THis was traversible", 
"but only just"), "Hiatus Hernia", c("Some Barrett's was seen", 
"There were no nodules"), c("HGD seen", 
"mitotic lesion"))), row.names = c(NA, -6L), class = c("tbl_df", 
"tbl", "data.frame"))

Мой код

mydf<-mydf %>%
    mutate(
      PrimaryDiagnosisCode = map(
        mydx, ~ case_when(
          grepl("mitotic|emr|tumour", tolower(.x)) ~ "C159  -  Malignant neoplasm oesophagus, unspecified - Oesophagus - unspecified",
          grepl("barrett",tolower(.x),ignore.case=TRUE) ~  "K227  -  Barrett's oesophagus",
          grepl("hiatus",tolower(.x),ignore.case=TRUE) ~  "K449  -  Diaphragmatic hernia without obstruction or gangrene",
        TRUE ~ "other")
    ),
    mydx = map(
      mydx, ~ .x[!grepl("(mitotic|emr|tumour|dysplasia|hiatus|stricture|barrett|hiatus", tolower(.x),ignore.case=TRUE,perl=TRUE)]
    )
)

Я должен повторить это для второго диагноза и третьего диагноза (с изменением имени в mutate)

Это дает мне вывод, который я хочу:

PrimaryDiagnosis     SecondDiagnosis      ThirdDiagnosis
K227
C159                    K227                K449
K449
K227
C159

Что я ищу:

 mydf<-mydf %>%
        mutate(
          PrimaryDiagnosisCode = map(
            mydx, ~ case_when(REFERENCE TO MY GREPS)
        ),
        mydx = map(
          mydx, ~ .x[!grepl("(mitotic|emr|tumour|dysplasia|hiatus|stricture|barrett|hiatus", tolower(.x),ignore.case=TRUE,perl=TRUE)]
        )
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...