当前位置: 首页 > 知识库问答 >
问题:

将脚本更改为函数,这样它就可以循环了。脚本使用mutate和str_detect创建新的数据帧列

宋景福
2023-03-14

我有一个大数据帧(462K行),其中有一个变量列出了药品的通用药品名称内容。有成千上万种不同的仿制药;我对其中大约100个感兴趣。有的药品具有多个仿制药成分;我需要知道药物中是否含有我感兴趣的药物。我创建了一个脚本,使用mutate将一个新的逻辑变量添加到数据帧中,如果使用str_detect单独或与其他仿制药组合存在一个仿制药,例如“布洛芬”,则该脚本为真。

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。

我有一个两列的tibble 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对传递给函数,我将不胜感激。

共有1个答案

孟浩然
2023-03-14

以mtcars集为例,可以使用以下方法:

find_names = function(dat, col1, string1, new_col_name) {

    mutate_call = lazyeval::interp(~ str_detect(a,string1), a = as.name(col1))

    dat %>% mutate_(.dots = setNames(list(mutate_call), new_col_name))

    return(dat)

  }

mtcars = find_names(mtcars, 'wt', '2', 'ibuprofen')

然后,使用for循环

for (i in 1:nrow(dict) { find_names(mtcars,'wt',dict[i,1],dict[i,2]) }
 类似资料:
  • 创建和使用脚本 游戏对象的行为由绑定的 组件 所控制。尽管 Unity 内置的组件非常灵活多样,但是你很快就会发现它们提供的功能远远不够,为了实现你所要的游戏功能,你需要超越它们才行。Unity 支持通过 脚本 创建属于你自己的组件。在组件中,随着时间的推移,你可以触发游戏事件、修改组件属性,还可以以任何你喜欢的方式来响应用户输入。 Unity 内置支持两种编程语言: C# 一种工业标准语言,类似

  • 我需要一个脚本,它迭代通过一个word文档,并改变以下标题样式或图像的段落样式为自定义样式,没有第一行缩进。 目标很简单:我希望段落的第一行缩进,但不是如果段落是在标题行或图像后面。由于这是一个很大的文档,而且我经常得到这些文档,所以我想要某种自动化,而不是试图手工完成这件事。 所以我想写一个脚本,它在段落中迭代,并在标题样式或图像之后将样式从“段落”更改为“没有缩进的段落”。

  • 问题内容: 我正在尝试设置回合部署脚本。我在使用远程登录时遇到了一些麻烦。在远程服务器上创建数据库时,我们需要使用sql帐户(而不是计算机或域,这是针对Server 2008 R2 SP1上的MSSQL 2008R2)登录。有没有办法为回旋连接和运行脚本提供不同的凭据,因为我在文档中没有看到它?谢谢。 问题答案: 如果指定连接字符串而不是服务器名称和数据库名称,则还可以设置凭据。 来自:https

  • 如何将javascript数据从循环保存到数组?

  • Hyperf 提供了创建模型的命令,您可以很方便的根据数据表创建对应模型。命令通过 AST 生成模型,所以当您增加了某些方法后,也可以使用脚本方便的重置模型。 php bin/hyperf.php gen:model table_name 创建模型 可选参数如下: 参数 类型 默认值 备注 --pool string default 连接池,脚本会根据当前连接池配置创建 --path strin

  • 问题内容: 项目配置: 数据库-MySQL 5.7 orm-Hibernate 4.3.11.Final / JPA 1.3.1.RELEASE Liquibase 3.4.2 当我仅从Liquibase从workBeanch运行脚本时,我的问题不存在。 我的SQL脚本看起来像这样: 确定并记录: 问题答案: 如果您使用的是yaml文件,则这是配置 确保stripComments应该为false,