У меня есть большой фрейм данных (462 тыс. Строк) с переменной, в которой содержится общее название лекарственного препарата. Есть тысячи разных дженериков; Меня интересует около 100 из них. У некоторых лекарств есть несколько компонентов-дженериков; Мне нужно знать, содержатся ли какие-либо лекарства, которые меня интересуют, в лекарстве. Я создал скрипт, который добавляет новую логическую переменную во фрейм данных с помощью mutate, которая имеет значение TRUE, если присутствует один из генерических препаратов, например, «ибупрофен», либо сам по себе, либо в сочетании с другими генерическими препаратами, использующими str_detect.
Я хотел бы превратить этот сценарий в функцию, чтобы можно было перебирать его по списку представляющих интерес препаратов вместо того, чтобы копировать и редактировать сценарий для каждого представляющего интерес препарата.
Вот сценарий, который работает, и в этом случае он найдет шаблон символов DICLOFEN в столбце фрейма данных drug_generic_name и создаст новый столбец в фрейме данных с именем Diclofenac:
Drug_Table_Names <- data.frame(mutate(Drug_Table_Names, DRUG_GENERIC_NAME,
Diclofenac = str_detect
(Drug_Table_Names$DRUG_GENERIC_NAME,"DICLOFEN", negate = FALSE)))
Я считаю, что у функции, которую я хочу, будет два аргумента: 1. Аргумент для mutate, который будет именем переменной, которую он создаст, Diclofenac в приведенном выше примере. 2. Аргумент для str_detect, чтобы обнаружить, то есть общее название препарата (или его части, в данном случае), в приведенном выше примере DICLOFEN.
У меня есть столбец с двумя столбцами, NSAID_LIST, с двумя переменными, drug_flag, который будет именем новой переменной, и gen_name, который является шаблоном, который будет искать str_detect:
# A tibble: 6 x 2
drug_flag gen_name
<chr> <chr>
1 Diclofenac DICLOFENAC
2 Fenoprofen FENOPROFEN
3 Flurbiprofen FLURBIPROFEN
4 Ibuprofen IBUPROFEN
5 Ketoprofen KETOPROFEN
6 Naproxen NAPROXEN
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 13 obs. of 2 variables:
$ drug_flag: chr "Diclofenac" "Fenoprofen" "Flurbiprofen" "Ibuprofen" ...
$ gen_name : chr "DICLOFENAC" "FENOPROFEN" "FLURBIPROFEN" "IBUPROFEN" ...
Вот моя неудачная попытка написать функцию, которую я назвал FlagDrugNames:
FlagDrugNames<-function (drug_flag, gen_name) {Drug_Table_Names <- data.frame(mutate(Drug_Table_Names, DRUG_GENERIC_NAME,
drug_flag = str_detect
(Drug_Table_Names$DRUG_GENERIC_NAME,
"gen_name", negate = FALSE)))}
У меня две проблемы:
Во-первых, функция не работает (или я не знаю, как ее использовать). Когда я запускаю функцию и набираю аргументы:
FlagDrugNames(Flurbiprofen, FLURBIPROFEN)
Он не добавляет новый столбец во фрейм данных, как это делает скрипт.
Второе: я бы хотел запустить эту функцию через список значений gen_name и drug_flag в таблице выше, показанной выше.
Буду признателен за помощь в написании функции, а затем в качестве эля, чтобы передать в нее пары drug_flag и gen_name.