Извлечь последнее слово в строке после запятой, если есть несколько слов, иначе первое слово

У меня есть данные, где слова следующим образом

 location<- c("xyz, sss, New Zealand", "USA", "Pris,France")
 id<- c(1,2,3)
 df<-data.frame(location,id)

Я хотел бы извлечь название страны из данных. Сложность в том, что если я извлеку только последнее слово, то у меня будет только одна запись (Франция).

library(stringr)
df$country<- word(df$location,-1)

Любые идеи о том, как извлечь данные о стране из этих данных?

 id  location                      country
  1   xyz, sss, New Zealand        New Zealand
  2   USA                          USA
  3   Pris,France                  France

person user3570187    schedule 30.06.2015    source источник


Ответы (2)


Вы можете попробовать sub

 df$country <- sub('.*,\\s*', '', df$location)
 df$country
 #[1] "New Zealand" "USA"         "France"   

Or

 library(stringr)
 str_extract(df$location, '\\b[^,]+$')
 #[1] "New Zealand" "USA"         "France"     
person akrun    schedule 30.06.2015
comment
explanation [sub]: из df$location, замените любой символ ., встречающийся любое количество раз *, до запятой, за которым следует любое число/тип пробела \\s без ничего '' explanation [str_extract]: из df$location, укажите 1 или несколько + целых слов \\b, а не [ ] в строке который заканчивается запятой ^, до конца строки $. (так что в основном укажите все целые слова после запятой) - person Richard; 30.07.2017

stringi решение:

require(stringi)
location<- c("xyz, sss, New Zealand", "USA", "Pris,France")
stri_trim(stri_match_first_regex(location, "(^|,)([^,]*?)$")[,3])
## [1] "New Zealand" "USA"         "France"  

stri_trim удаляет лишние пробелы до/после названия страны.

person bartektartanus    schedule 16.01.2018