【发布时间】:2019-06-24 16:00:47
【问题描述】:
我有一个大型数据框(462K 行),其中有一个变量列出了药品的通用药品名称内容。有成千上万种不同的仿制药;我对其中大约 100 个感兴趣。有些药物有多种仿制药成分;我需要知道药物中是否含有我感兴趣的任何药物。我创建了一个脚本,该脚本使用 mutate 向数据框添加一个新的逻辑变量,如果其中一种仿制药存在,例如“布洛芬”,则为 TRUE,无论是单独存在还是与使用 str_detect 的其他仿制药结合使用。
我想把这个脚本变成一个函数,这样我就可以在感兴趣的药物列表中循环它,而不是为每种感兴趣的药物复制和编辑脚本。
这是一个有效的脚本,在这种情况下,它将在数据框列 drug_generic_name 中找到字符模式 DICLOFEN,并在数据框中创建一个名为 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 的参数,它将是它将创建的变量的名称,在上面的示例中为双氯芬酸。 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)
它不会像脚本那样向数据框添加新列。
第二:我想通过上面显示的 tibble 中的 gen_name 和 drug_flag 值列表来运行这个函数。
我将不胜感激编写函数,然后将 drug_flag 和 gen_name 对传递给函数。
【问题讨论】: