Как создать столбец во фрейме данных, который содержит часть строки? - PullRequest
1 голос
/ 24 февраля 2020

В моем фрейме данных есть столбец «Предложение», содержащий слова, а затем название штата. Я заинтересован в том, чтобы получить только название штата и создать отдельный столбец с этими только.

Пока я сделал это:

Pattern = paste0(paste0(".*\\b(", paste0(state.name, collapse="|")), ")\\b.*")

df$state = sub(Pattern, "\\1", df$Sentence)

Проблема в том, что Вирджиния - это штат Но Западная Вирджиния тоже.

Первый пример: предложение [1] = Я живу в Западной Вирджинии.

Второй пример: предложение [2] = Я однажды ездил в Вирджинию.

Для обоих примеров мой код возьмет слово "Вирджиния" и добавит его в столбец состояния.

Другими словами, слово "Западная Вирджиния" никогда не будет добавлено.

df <- data.frame(
  Sentence = c('I live in West Virginia.', 'I went to Virginia once.'),
  Result = c('West Virginia', 'Virginia'),
  stringsAsFactors = FALSE
)

#                   Sentence        Result
# 1 I live in West Virginia. West Virginia
# 2 I went to Virginia once.      Virginia

1 Ответ

0 голосов
/ 24 февраля 2020

Вы можете объединить различные строки поиска с помощью |, как показано ниже. Я обнаружил, что stringi::stri_extract_all автоматически даст вам самое длинное совпадение в случае нескольких попаданий.

df <- data.frame(
  Sentence = c('I live in West Virginia.', 'I went to Virginia once.'),
  stringsAsFactors = FALSE
)
df
#>                   Sentence
#> 1 I live in West Virginia.
#> 2 I went to Virginia once.
r <- paste(state.name,collapse = '|')

r
#> [1] "Alabama|Alaska|Arizona|Arkansas|California|Colorado|Connecticut|Delaware|Florida|Georgia|Hawaii|Idaho|Illinois|Indiana|Iowa|Kansas|Kentucky|Louisiana|Maine|Maryland|Massachusetts|Michigan|Minnesota|Mississippi|Missouri|Montana|Nebraska|Nevada|New Hampshire|New Jersey|New Mexico|New York|North Carolina|North Dakota|Ohio|Oklahoma|Oregon|Pennsylvania|Rhode Island|South Carolina|South Dakota|Tennessee|Texas|Utah|Vermont|Virginia|Washington|West Virginia|Wisconsin|Wyoming"
library(stringi)

df$State <- unlist(stri_extract_all(df$Sentence,regex = r))

df
#>                   Sentence         State
#> 1 I live in West Virginia. West Virginia
#> 2 I went to Virginia once.      Virginia

Создано в 2020-02-24 с помощью пакета prex ( v0.3.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...