В R удалите шаблон подстроки из строки с помощью gsub

#r #string #gsub

#r #строка #gsub

Вопрос:

В нашей базе данных есть столбец string со значениями для спортивных команд. Названия этих команд иногда имеют префикс с рейтингом команды, например, такой: (13) Miami (FL) . Здесь 13 — это ранг Майами, а (FL) означает, что это Майами, Флорида, а не Майами, штат Огайо ( Miami (OH) ):

Нам нужно очистить эту строку, удалив (13) и сохранив только Miami (FL) . До сих пор мы использовали gsub и пробовали следующее:

 > gsub("\s*\([^\)] \)", "", "(13) Miami (FL)")
[1] " Miami"
  

Это приводит к неправильному удалению суффикса (FL), а также к неправильной обработке пробела впереди.

Редактировать

Вот несколько дополнительных названий школ, чтобы немного показать данные, с которыми мы работаем. Обратите внимание, что не каждая школа имеет префикс (##).:

 c("North Texas", "Southern Methodist", "Texas-El Paso", 
  "Brigham Young", "Winner", "(12) Miami (FL)", "Appalachian State", 
  "Arkansas State", "Army", "(1) Clemson", 
  "(14) Georgia Southern")
  

Ответ №1:

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

 sub("\(\d \)\s", "", "(13) Miami (FL)")
#[1] "Miami (FL)"
  

Регулярное выражение можно было бы сделать более строгим на основе шаблона в данных.

Ответ №2:

Мы можем сопоставить начало ( , за которым следует одна или несколько цифр ( \d ), затем закрытие ) ) и один или несколько пробелов ( \s ), заменить пробелами ( "" )

 sub("\(\d \)\s ", "",  "(13) Miami (FL)")
#[1] "Miami (FL)"
  

Используя обновленный пример OP

 sub("\(\d \)\s ", "",  v1)
#[1] "North Texas"        "Southern Methodist" "Texas-El Paso"      "Brigham Young"      "Winner"             "Miami (FL)"        
#[7] "Appalachian State"  "Arkansas State"     "Army"               "Clemson"            "Georgia Southern"  
  

Или другой вариант с str_remove помощью from stringr

 library(stringr)
str_remove("(13) Miami (FL)", "\(\d \)\s ")
  

Ответ №3:

Другое решение, основанное на stringr этом:

 str_extract(v1, "[A-Z].*")
 [1] "North Texas"        "Southern Methodist" "Texas-El Paso"      "Brigham Young"      "Winner"            
 [6] "Miami (FL)"         "Appalachian State"  "Arkansas State"     "Army"               "Clemson"           
[11] "Georgia Southern"
  

Это извлекает все, начиная с первой заглавной буквы (тем самым игнорируя нежелательные рейтинги).