извлечь шаблон из нескольких строк и вернуться к одному значению в r - PullRequest
1 голос
/ 14 января 2020

У меня есть строка:

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"

Я использовал str_extract для извлечения нескольких шаблонов из строки:

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

[1] "Compound.name:Cyclohexylamine;" "HMDB.ID:HMDB31404;"             "KEGG.ID:C00571;"               
[4] "mz.match.score:0.9997398;"

Я хотел бы, чтобы результат возвращался к одному значению, как сделать это? как:

[1] "Compound.name:Cyclohexylamine;HMDB.ID:HMDB31404;KEGG.ID:C00571;mz.match.score:0.9997398;"

1 Ответ

2 голосов
/ 14 января 2020

Вы можете paste строку вместе с пустым 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, вы также можете использовать str_c вместо paste0.


Мы можем использовать его как функцию

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

и затем применять для каждого значения в столбце, используя sapply

sapply(df$column_name, apply_fun)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...