Извлечение города (определенного слова) из столбца фрейма данных в R

#r

#r

Вопрос:

Предположим, у меня есть файл Excel, и я прочитал его как фрейм данных и загрузил в R. Один из столбцов представляет собой текстовый столбец, содержащий одно или несколько слов. Я должен найти, содержит ли ячейка конкретный город, указанный в «City_Vector» (например c("New York", "Beijing", "Paris", "London") , и извлечь его (или извлечь первое совпадение / все совпадения). В Excel я использовал пользовательскую функцию и получил что-то подобное:

| For Moscow State University | должен вернуться Moscow ; | asdsadsadsaWarsawsdaqq | должен вернуться Warsaw

Я попытался разделить строку и использовать %in% , но, похоже, это не лучшее решение. Спасибо!

Ответ №1:

Если целью является извлечение совпадений независимо от регистра, то это должно сработать:

Данные:

 City_Vector <- c("New York", "Bejing", "Paris", "London", "Moscow", "Warsaw")
cities <- c('Moscow State University','asdsadsadsaWarsawsdaqq', 
            'New York Philhamonics', 'food in Bejing', 'parisclimateaccord')
 

Решение:

 library(stringr)
str_extract(cities, paste0("(?i)(", paste0(City_Vector, collapse = "|"), ")"))
 

Объяснение:

Суть здесь в том, чтобы сформулировать все возможные названия городов в виде шаблона альтернатив (обратите внимание на маркер чередования | ), используя вложенные paste0 команды.

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

(?i) используется для того, чтобы сделать шаблон нечувствительным к регистру.

Комментарии:

1. Спасибо! Но как насчет того, чтобы сделать его не чувствительным к регистру? Или это возможно только тогда, когда мы добавляем к вектору города оба Warsaw и warsaw ?

2. Или просто используйте tolower() и работайте со строчными строками

3. Отредактировали ответ, чтобы сделать шаблон нечувствительным к регистру. Пожалуйста, рассмотрите возможность принятия и / или голосования.

Ответ №2:

Используйте str_extract() из stringr пакета.

Слишком простой пример:

 cityVec <- c('Moscow State University','asdsadsadsaWarsawsdaqq')
str_extract(cityVec, 'Moscow')
 

Комментарии:

1. Это только проверяет, есть ли совпадение для Moscow , но не для любого другого названия города