提取多个字符串模式并返回r中的单个值

提取多个字符串模式并返回r中的单个值,r,string,R,String,我有一个字符串: test<-c("Compound.name:Cyclohexylamine;CAS.ID:108-91-8;HMDB.ID:HMDB31404;KEGG.ID:C00571;Lab.ID:shen_4881_HMDB31404;Adduct:(M+H)+;mz.error:0.5703867;mz.match.score:0.9997398;RT.error:NA;RT.match.score:NA;CE:Unknown_1;SS:0.52575;Total.score

我有一个字符串:

test<-c("Compound.name:Cyclohexylamine;CAS.ID:108-91-8;HMDB.ID:HMDB31404;KEGG.ID:C00571;Lab.ID:shen_4881_HMDB31404;Adduct:(M+H)+;mz.error:0.5703867;mz.match.score:0.9997398;RT.error:NA;RT.match.score:NA;CE:Unknown_1;SS:0.52575;Total.score:0.7034962;Database:hmdbDatabase0.0.1
120 Levels: Compound.name:3-Dehydroxycarnitine;CAS.ID:;HMDB.ID:HMDB06831;KEGG.ID:C05543\t;Lab.ID:shen_3269_HMDB06831;Adduct:(M+H)+;mz.error:0.7554105;mz.match.score:0.9995436;RT.error:NA;RT.match.score:NA;CE:Unknown_1;SS:0.6706675;Total.score:0.793996;Database:hmdbDatabase0.0.1"
我希望结果返回到单个值,如何做到这一点? 比如:


您可以将字符串与空的
collapse
参数一起粘贴

library(stringr)
paste0(str_extract(test, pattern = c("Compound\\.name(.*?);","HMDB\\.ID(.*?);",
       "KEGG\\.ID(.*?);","mz\\.match\\.score(.*?);")), collapse = "")

#[1]Compound.name:Cyclohexylamine;HMDB.ID:HMDB31404;KEGG.ID:C00571;mz.match.score:0.9997398;"
或者,由于您已经在使用
stringr
,也可以使用
stru_c
而不是
paste0


我们可以把它当作一个函数

apply_fun <- function(x) {
    paste0(str_extract(test, pattern = c("Compound\\.name(.*?);","HMDB\\.ID(.*?);",
           "KEGG\\.ID(.*?);","mz\\.match\\.score(.*?);")), collapse = "")
}

请尝试粘贴(…,collapse=“”)查看str_extract的结果非常感谢@Ronak Shah。我尝试将其用作函数:函数(x)paste0(str_extract(x,pattern=c(“component\\.name(.*)”,“HMDB\.ID(.*)”,“KEGG\\.ID(.*)”,“mz\.match\\\.score(.*)),collapse=“”)并应用于一个datafrme,其中的值与我的示例类似,但我得到错误:警告消息:在stri_extract_first_regex中(string,pattern,opts_regex=opts(pattern)):参数不是原子向量;强制。我可以知道原因吗?@LennonLee您需要使用
sapply
将其应用于列中的每个值。检查更新的答案。
library(stringr)
paste0(str_extract(test, pattern = c("Compound\\.name(.*?);","HMDB\\.ID(.*?);",
       "KEGG\\.ID(.*?);","mz\\.match\\.score(.*?);")), collapse = "")

#[1]Compound.name:Cyclohexylamine;HMDB.ID:HMDB31404;KEGG.ID:C00571;mz.match.score:0.9997398;"
apply_fun <- function(x) {
    paste0(str_extract(test, pattern = c("Compound\\.name(.*?);","HMDB\\.ID(.*?);",
           "KEGG\\.ID(.*?);","mz\\.match\\.score(.*?);")), collapse = "")
}
sapply(df$column_name, apply_fun)