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

2
MCS 16 Фев 2021 в 13:24

2 ответа

Лучший ответ

Ты можешь использовать

data <- c("DETROIT","DETROIT USA","DETROIT UNITED STATES")
keep <- c("USA","UNITED STATES")

regex <- paste0(".*\\s*\\b(",paste0(keep,collapse="|"), ")\\b")
sub(regex, "\\1", data)
## => [1] "DETROIT"       "USA"           "UNITED STATES"

См. демонстрацию R в Интернете.

Регулярное выражение - .*\s*\b(USA|UNITED STATES)\b, см. его онлайн-демонстрацию.

< EM> Подробнее :

  • .* - любой ноль или более символов как можно больше
  • \s* - ноль или более пробелов
  • \b(USA|UNITED STATES)\b - целое слово USA или UNITED STATES, записанное в Группу 1 (\1 в шаблоне замены).
1
Wiktor Stribiżew 16 Фев 2021 в 10:52

Вы можете использовать str_extract для извлечения шаблона, если он есть. Это возвращает NA в случае отсутствия шаблона, который вы можете заменить исходным data.

keep <- c("USA","UNITED STATES")
keep <- paste0(paste0(" ",keep,"$"),collapse="|")

result <- stringr::str_extract(data, keep)
result[is.na(result)] <- data[is.na(result)]
trimws(result)
#[1] "DETROIT"       "USA"           "UNITED STATES"
0
Ronak Shah 16 Фев 2021 в 10:35
66222589