Удалить строку, кроме слов в определенной позиции в R - PullRequest
0 голосов
/ 11 марта 2019

У меня есть следующие строки

string <- c("Trade (% of GDP) – Latin America & Caribbean (WB/WDI/NE.TRD.GNFS.ZS-ZJ)", "Trade (% of GDP) – North America (WB/WDI/NE.TRD.GNFS.ZS-XU)"  )

В этой строке я хочу удалить все, кроме `` среднего 'предложения.

Мой ожидаемый результат должен выглядеть следующим образом:

excpected_string <- c("Latin America & Caribbean", "North America"  )

Может кто-нибудь помочь мне, как я могу сделать это, используя gsub

Ответы [ 2 ]

1 голос
/ 11 марта 2019

Другая идея

trimws(sub(".*–([^\\(]+).*", "\\1", string))
# [1] "Latin America & Caribbean" "North America" 

Удаляет все, вплоть до , а также то, что следует за открывающей скобкой (. Мы используем группу захвата, чтобы изолировать желаемый результат. trimws удаляет начальные и конечные пробелы.

1 голос
/ 11 марта 2019

Вы можете сделать это с помощью регулярного выражения. Основываясь на двух примерах, я определила два шаблона: 1) удалить все до - и 2) удалить все внутри паренов ().

Вот одно из решений:

string <- c("Trade (% of GDP) – Latin America & Caribbean (WB/WDI/NE.TRD.GNFS.ZS-ZJ)", "Trade (% of GDP) – North America (WB/WDI/NE.TRD.GNFS.ZS-XU)"  )
gsub("^.*\\s–\\s|\\s*\\([^\\)]+\\)", "", string)
#> [1] "Latin America & Caribbean" "North America"

Создано в 2019-03-10 пакетом представ. (v0.2.1)

Первая часть регулярного выражения ^.*\\s–\\s гласит: «возьмите все символы с начала строки, прежде чем мы найдем -».

В регулярном выражении | означает ИЛИ, поэтому второе регулярное выражение \\s*\\([^\\)]+\\ идентифицирует весь текст (и начальные / конечные пробелы) внутри паренов. Закажите для этого вопроса для этого регулярного выражения.

...