2015-06-30 29 views
5

mam gdzie dane te słowa następującoExtract ostatnie słowo w ciągu znaków po przecinku, jeśli istnieje wiele słów else pierwsze słowo

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

Chciałbym wyodrębnić nazwę kraju z danymi. Najtrudniejsze jest to, że jeśli wydobędę tylko ostatnie słowo, to będę miał tylko jedną płytę (Francja).

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

Jakieś pomysły dotyczące sposobu wydobywania danych krajowych z tych danych?

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

Odpowiedz

7

Można spróbować sub

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

Albo

library(stringr) 
str_extract(df$location, '\\b[^,]+$') 
#[1] "New Zealand" "USA"   "France"  
+1

'objaśnienie [pod]:' z 'df $ location', zastąp dowolny znak' .', występujący dowolną liczbę razy '*', do przecinka, a następnie dowolną liczbę/typ białych znaków \\ s' bez niczego '' '' 'explanation [str_extract]:' from 'df $ location', podaj 1 lub wiele' + 'całych słów' \\ b', a nie '[]' w ciągu zakończonym przecinkiem '' ^, 'aż do końca łańcucha' $ '. (więc po prostu podaj całe słowa po przecinku) – Richard

0

stringi rozwiązanie:

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 usuwa niepotrzebne spacje przed/po Nazwa kraju.