#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"
Это извлекает все, начиная с первой заглавной буквы (тем самым игнорируя нежелательные рейтинги).