2016-09-07 3 views
1

後、私はこのようになりますRで郵便番号データ持っている文字列の文字を分割:スペースの後のすべての文字を含んでR - スペース

Postcodes 
AB4 6JK 
AR14 8UI 
D4 9IK 
CB3 9EU 

しかし、私は郵便番号のセクタに郵便番号を分割したいが、彼らはこのように見えるように、:

Postcodes 
AB4 6 
AR14 8 
D4 9 
CB3 9 

などherehereなどのスペース、に基づいて文字列を分離するに焦点を当てたとして、私はQ &をたくさん見つけたが、どのように私は1つの文字を分割するように指定しますアフト空間は?

ポストコードは固定長ではありません。

私は後でポストコードセクターに基づいてポストコードデータを集約しようと考えています。

答えて

4

subを使用して次の正規表現のアプローチを試すことができます。キャプチャグループを作成し、その文字列から抽出します。

あなたのデータがxと呼ばれていると仮定:

x <- read.table(header=TRUE,text="Postcodes 
       'AB4 6JK' 
       'AR14 8UI' 
       'D4 9IK' 
       'CB3 9EU'") 

アプローチは、このようなことができます:

sub("^(.*\\s.).*", "\\1", x$Postcodes) 
# [1] "AB4 6" "AR14 8" "D4 9" "CB3 9" 

パターンがある:文字列(^)の始まり、任意の文字が続きます( .*)の後にスペース(\\s)と1つの追加文字(.)が続き、これらが一緒にキャプチャグループを作成します。さらに、後続のものはキャプチャグループの一部ではありません。

あなたが複数のスペースを含む文字列を持っている場合、それは次の操作を行うことに注意してください:

sub("^(.*\\s.).*", "\\1", "abc def 981") 
#[1] "abc def 9" 
+0

を! –

1

あなたはスペースが付いている番号の後に分割するために正の後読みの正規表現を使用することができます。

strsplit(postcode,"(?<= [0-9])",perl=TRUE) 

分割文字列の最初の部分を取得するには:

sapply(strsplit(postcode,"(?<= [0-9])",perl=TRUE),'[[',1) 
#[1] "AB4 6" "AR14 8" "D4 9" "CB3 9" 
0

あなたも行うことができます:、おかげで働いた

lapply(strsplit(as.character(Postcodes), " "), function(x) paste(x[1], substr(x[2],0,1))) 
+1

このアイデアでループを張ることなく、 'paste(gsub( '\\ s +。*'、 ''、x $ Postcodes)、substring(gsub( '。* \\ s +'、 '' x $ Postcodes)、1、1)) ' – Sotos

関連する問題