2016-04-11 3 views
1

私は姓と名のベクトルを含むデータセットを持っています。私は最初の名前を削除し、最後の名前だけを残したいと思います。姓と名は両方とも単語の数に違いがありますが、姓は大文字で、最初の名前の前にありますが、最初の名前の最初の文字のみが大文字になります。私はそれが唯一のstringrパッケージでこれをやろうとされているが、文字列に完全に大文字の単語のみを保持するR

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

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

そして持っていると思います。つまり

は、私は次のようなものを持っています最初の単語の最初の大文字に戻ります。

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

'str_extract_all(Xを別のベクトルを用いgsub

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

を使用して、 "([AZ] +(?= [^ AZ]))" ) '多分? –

答えて

0

str_extract_allを指定すると大文字の部分文字列がすべて抽出されます。 OPの投稿で使用されているパターンは、大文字の1文字にしか一致しません。単語境界(\\b)とともに1つ以上([A-Z]+)が必要です。出力はlistになります。でループすることで、pasteを一緒に出力できます。

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

または

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" 
関連する問題