Извлечь заголовок из нескольких строк - PullRequest
1 голос
/ 07 ноября 2019

У меня есть несколько файлов, каждый из которых имеет свой заголовок, я хочу извлечь название заголовка из каждого файла. Вот пример одного файла

[1] "<START"                        "ID=\"CMP-001\""                  "NO=\"1\">"                         
[4] "<NAME>Plasma-derived"          "vaccine"                         "(PDV)"                             
[7] "versus"                        "placebo"                         "by"                                
[10] "intramuscular"                "route</NAME>"                    "<DIC"                     
[13] "CHI2=\"3.6385\""              "CI_END=\"0.6042\""               "CI_START=\"0.3425\""   
[16] "CI_STUDY=\"95\""                "CI_TOTAL=\"95\""               "DF=\"3.0\""                        
[19] "TOTAL_1=\"0.6648\""           "TOTAL_2=\"0.50487622\""           "BLE=\"YES\"" 
.
.
.
 [789] "TOTAL_2=\"39\""             "WEIGHT=\"300.0\""              "Z=\"1.5443\">"    
 [792] "<NAME>Local"                "adverse"                       "events" 
 [795] "after"                      "each"                          "injection"
 [798] "of"                         "vaccine</NAME>"               "<GROUP_LABEL_1>PDV</GROUP_LABEL_1>"
 [801] "</GROUP_LABEL_2>"           "<GRAPH_LABEL_1>"              "PDV</GRAPH_LABEL_1>"

извлеченный ожидаемый заголовок:

Plasma-derived vaccine (PDV) versus placebo by intramuscular route

Обратите внимание, каждый файл имеет разную длину заголовка.

1 Ответ

0 голосов
/ 07 ноября 2019

Вот решение с использованием stringr. Это сначала сворачивает вектор в одну длинную строку, а затем захватывает все слова / символы, которые не являются новой строкой \n между каждой парой "<NAME>" и "</NAME>". В будущем люди смогут вам легче помочь, если вы сделаете воспроизводимый пример (например, используя dput()). Надеюсь, это поможет!

Примечание: если вы выбрали только один первый заголовок, вы можете использовать str_match() вместо str_match_all().

library(stringr)

str_match_all(paste0(string, collapse = " "), "<NAME>(.*?)</NAME>")[[1]][,2]
[1] "Plasma-derived vaccine (PDV) versus placebo by intramuscular route"
[2] "Local adverse events after each injection of vaccine" 

Данные :

string <- c("<START", "ID=\"CMP-001\"", "NO=\"1\">", "<NAME>Plasma-derived", "vaccine", "(PDV)", "versus", "placebo", "by", "intramuscular", "route</NAME>", "<DIC", "CHI2=\"3.6385\"", "CI_END=\"0.6042\"", "CI_START=\"0.3425\"", "CI_STUDY=\"95\"", "CI_TOTAL=\"95\"", "DF=\"3.0\"", "TOTAL_1=\"0.6648\"", "TOTAL_2=\"0.50487622\"", "BLE=\"YES\"",
            "TOTAL_2=\"39\"", "WEIGHT=\"300.0\"", "Z=\"1.5443\">", "<NAME>Local", "adverse", "events", "after", "each", "injection", "of", "vaccine</NAME>", "<GROUP_LABEL_1>PDV</GROUP_LABEL_1>", "</GROUP_LABEL_2>", "<GRAPH_LABEL_1>", "PDV</GRAPH_LABEL_1>")
...