Извлечение частей текстовой строки между двумя символами - PullRequest
0 голосов
/ 03 марта 2019

Я новичок в R и все еще учусь, поэтому буду очень признателен за любую помощь или предложение.

У меня есть разные строки символов, подобные этим:

"Department of Biophysical Chemistry, University of Braunschweig, Braunschweig, Germany; Consejo Superior de Investigaciones Científicas, CCHS, Madrid, Spain;"

Тогда я хотел бы извлечь только названия стран в этих строках, включая точку с запятой, то есть:

"Germany; Spain;"

Для меня проблема состоит в том, чтобы выяснить, как извлечь только из последней комы вточка с запятой и делать это неоднократно.Я попытался с функцией gsub, но я не смог сделать правильный подход ..

Ответы [ 3 ]

0 голосов
/ 03 марта 2019

Для тестового ввода создайте 3-компонентный вектор s, как показано в примечании в конце, чтобы мы могли видеть, что он работает для нескольких строк - здесь только три строки.

Теперь мы можемполучите однострочное решение, используя strapply в пакете gsubfn.Мы сопоставляем указанный шаблон, возвращая только совпадение группе захвата, то есть части в скобках.Затем для каждой строки мы используем от sapply до paste совпадений.

library(gsubfn)

sapply(strapply(s, ", ([^,;]+;)"), paste, collapse = " ")

, давая:

[1] "Germany; Spain;" "Germany; Spain;" "Germany; Spain;"

Примечание

s1 <- "Department of Biophysical Chemistry, University of Braunschweig, Braunschweig, Germany; Consejo Superior de Investigaciones Científicas, CCHS, Madrid, Spain;"
s <- c(s1, s1, s1)
0 голосов
/ 03 марта 2019

Я бы просто нашел последнюю запятую перед ; и перехватил бы все, используя простой вызов gsub.Это также будет работать для вектора

gsub(".*?(=?[^,]*;)", "\\1", x, perl = TRUE)
# [1] " Germany; Spain;"
0 голосов
/ 03 марта 2019

Мы можем попробовать использовать strsplit вместе с sub здесь для базовой опции R:

x <- "Department of Biophysical Chemistry, University of Braunschweig, Braunschweig, Germany; Consejo Superior de Investigaciones Científicas, CCHS, Madrid, Spain;"
terms <- sapply(strsplit(x, ";\\s*")[[1]], function(x) {
    sub("^.*\\s+", "", x)
})
output <- paste0(terms, ";", collapse=" ")
output

[1] "Germany; Spain;"

Логика здесь заключается в том, чтобы сначала разбить строку, разделенную точкой с запятой, на шаблон ;\s*,что приводит к списку, содержащему каждый отдел.Затем мы используем apply для удаления всего, вплоть до последнего появления пробела.Наконец, мы вставляем свернуть, чтобы сгенерировать еще одну строку, разделенную точкой с запятой.

Примечание: я изменил имена выходного вектора только для демонстрационных целей, потому что R использовал полное описание отдела в качестве имени по умолчанию, что затруднялодисплей.

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