一所懸命に手抜きする

デスクワークばかりのスポーツ嫌いで50歳も過ぎ、いよいよ足腰に衰えを感じつつある昨今。

七五三木一さんはなんと読む?文字列を任意の区切り文字(文字列)で分割する

七五三木一(nagomiki.hajime@xxx)さん

 七五三木一さんという人がいるとします。社員マスタに読み仮名がないのですが、メールアカウントの項目があり、 姓.名(.同姓同名の場合連番)を原則としています。
このアドレスから、この人は「なごみきはじめ」さんだとわかります。
 昨今のきらきらネームだけでなく、なんと読むのかわからない人名が多いので読み仮名項目を整備することになりました。社員マスタを整理するにあたり姓(読み仮名)と名(読み仮名)という項目を設けることとします。この人の場合 姓 nagomiki 名前 hajime です。姓は.の左、名前は.の右にあります。つまり文字列をビリオド(.)という区切り文字で分割すればよいことになります。

strsplit() 関数

 Rでは文字列を任意の区切り文字(文字列)で分割するには、strsplit関数を使います。正規表現も使えます。

strsplit(string,separater)
#第一引数で指定された文字列を第二引数で指定された区切り文字列で区切ります。

 結果はlistで返ります。

strsplit() 関数 を用いてピリオドで分割する例
str<-"nagomiki.hajime"
#↓結果はlistで得られる
(strsplit(str,"[.]"))
[[1]]
[1] "nagomiki" "hajime" 
#↓ベクトルで十分なので unlist
(tmp<-unlist(strsplit(str,"[.]")))
[1] "nagomiki" "hajime"  
#第一要素(姓)
tmp[1]
[1] "nagomiki"
#第二要素(名前)
tmp[2]
[1] "hajime"

いろいろと分割してみる

strsplit() 関数 を用いてファイルパスを分割する例
str<-"c:/User/XYZ/Desktop/abc.xls
(tmp<-unlist(strsplit(str,"[/]")))
[1] "c:"      "User"    "XYZ"     "Desktop" "abc.xls"

 ただし、ファイル名を得たいだけならば、basename(ファイルパス)で対応できます。

strsplit() 関数 を用いてASライブラリ名/ファイル名をスラッシュ(/)で分割する例
"str<-"MASTER/OFFICE" # ASライブラリ名/ファイル名
# 区切り文字が . の場合は前述の例を使用
(tmp<-unlist(strsplit(str,"[/]")))
[1] "MASTER" "OFFICE"
(.Lib<-tmp[1]) # ASライブラリ名
[1] "MASTER"
(.Tab<-tmp[2]) # ASファイル名
[1] "OFFICE"

 続いて空白で分割する場合ですが、空白は他の区切り文字とは異なる点があります。例えば / スラッシュ は一つのスラッシュが一つの区切りを表すと断定してもまず間違いないでしょう。しかし、空白の場合は、連続したひとまとまりの空白を一つの区切りと見なすほうが良いでしょう。

strsplit() 関数 を用いて空白で分割する例
"str<-"COFFEE    SHOP XYZ"
(tmp<-unlist(strsplit(str,"[ ]+")))
[1] "COFFEE" "SHOP"   "XYZ"   

 正規表現 [ ]+ を用いることで、1つ以上の半角空白という意味になっています。