2016-04-11 10 views
1

Ich habe ein Dataset mit einem Vektor aus Vor- und Nachnamen. Ich möchte die Vornamen entfernen und nur die Nachnamen behalten. Während sowohl die Nachnamen als auch die Vornamen in der Anzahl der Wörter variieren, sind die Nachnamen immer in Großbuchstaben und vor den Vornamen, während nur der erste Buchstabe des Vornamens großgeschrieben wird.Nur voll geschriebene Wörter in der Zeichenkette halten mit R

Mit anderen Worten, ich habe so etwas wie die folgende:

x <- c("AA AA Aa Aa", "BB BB Bb", "CC Cc Cc", "DD Dd") 

Und haben möchte:

x 
[1] "AA AA" "BB BB" "CC" "DD"  

Ich habe versucht, dies mit dem stringr Paket zu tun, aber es nur kehrt zur ersten Hauptstadt Buchstabe des ersten Wortes:

library(stringr) 
str_extract(x, "[A-Z]") 
[1] "A" "B" "C" "D" 
+0

'str_extract_all (x, "([AZ] + (? = [^ Az]))") 'vielleicht? –

Antwort

0

Wir verwenden str_extract_all, um alle aktivierten Teilstrings zu extrahieren. Das im OP des OP verwendete Muster kann nur einen einzelnen Großbuchstaben enthalten. Wir benötigen eine oder mehrere() zusammen mit der Wortgrenze (\\b). Die Ausgabe wird eine list sein, die wir paste zusammen mit sapply durchschleifen können.

library(stringr) 
sapply(str_extract_all(x, "\\b[A-Z]+\\b"), paste, collapse= ' ') 
#[1] "AA AA" "BB BB" "CC" "DD" 

Oder gsub

trimws(gsub("[[:alpha:]][a-z]+|[a-z][[:alpha:]]+", "", x)) 
#[1] "AA AA" "BB BB" "CC" "DD" 

mit Verwendung eines anderen Vektors

x1 <- c(x, "eE ee EE") 
sapply(str_extract_all(x1, "\\b[A-Z]+\\b"), paste, collapse= ' ') 
#[1] "AA AA" "BB BB" "CC" "DD" "EE" 

trimws(gsub("[[:alpha:]][a-z]+|[a-z][[:alpha:]]+", "", x1)) 
#[1] "AA AA" "BB BB" "CC" "DD" "EE" 
Verwandte Themen