2015-06-30 7 views
5

I-Daten, wo die Worte alsExtract letztes Wort in einem String nach dem Komma, wenn mehrere Worte sonst das erste Wort sind

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

folgt würde Ich mag den Namen des Landes aus den Daten extrahieren. Der schwierige Teil ist, wenn ich nur das letzte Wort extrahiere, dann habe ich nur einen Rekord (Frankreich).

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

Haben Sie Ideen, wie Sie aus diesen Daten Länderdaten extrahieren können?

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

Antwort

7

können Sie versuchen, sub

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

Oder

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

'erklärung [sub]:' von 'df $ location', ersetzen Sie ein beliebiges Zeichen' .', beliebig oft '*', bis zu einem Komma, gefolgt von einer beliebigen Zahl/Art von Leerzeichen '\\s' mit nichts '' '' 'erklärung [str_extract]:' aus 'df $ location', bieten 1 oder mehrere' + 'ganze Wörter' \\ b', nicht '[]' in einer Zeichenfolge, die in einem Komma 'endet ^, 'bis zum Ende der Zeichenkette' $ '. (also im Grunde alle ganzen Wörter nach dem Komma) – Richard

0

stringi Lösung:

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 entfernt unnötige Leerzeichen vor/nach Ländername.

Verwandte Themen