一所懸命に手抜きする

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

Rで文字列の空白をなるべく簡単に削除する

※前回記事
 文字列の左側/右側/両側の半角空白や\t\r\nを削除するR関数 trimws() - 一所懸命に手抜きする
 trimws関数で文字列の両側の半角空白\t\r\nを削除。ただし文字列中の空白は削除できなかった。

削除したい空白は半角?全角?

文字列の削除にはgsub()関数が使えます

 「Rで文字列の空白を削除したい」という時があります。
 「半角でも全角でも、とにかく空白を排除したい」「半角空白だけ削除したい」「全角空白だけ削除したい」、希望はいろいろです。自分がどの空白を削除したいのか考えて対処したいものです。文字列の削除にはgsub()関数が使えます。

gsub()関数
gsub(パターンbeforeを,パターンafterに置き換え,元の文字列)

 パターンbeforeに(1)半角空白、(2)全角空白、(3)全角半角空白、と区別して指定し、パターンafterに""を指定してやれば希望の空白削除ができます。

全角半角両方の空白とtabを表す正規表現[:blank:]

 でも、(3)全角半角空白はどのように指定するのでしょうか。正規表現に[:blank:]というものがあり、これが全角半角を問わず空白と\tを表しているようです

gsub()関数で明示的に空白の全角半角を考えて削除する例
str<-" あ い "    #   (SPC)あ(SPC)い(SPC)
(gsub(" ","",str))  #   半角空白削除
[1] " あ い"
(gsub(" ","",str)) #   全角空白削除
[1] "あい "
(gsub("[[:blank:]]","",str)) # 全角半角空白削除
[1] "あい"

正規表現[:blank:]は全角半角両方の空白だけでなくtabも含む

[:blank]はタブも対象としている
str<-"TAB\t LF\n  RET\r"    
(gsub("[[:blank:]]","",str)) # 全角半角空白とタブ削除
[1] "TABLF\nRET\r"

 trimws() は半角空白と\t\n\rを削除するのでした。、gsub(":blank:","",str) は全角空白半角空白とtab(\t)を削除します。\tを削除して良いならば gsub(":blank:","",str) は半角全角問わず空白を除去する用途に使えて良いのですが、\tを除去するのは困るという場合には別の手を考える必要があります。

半角空白を削除してから全角空白を削除するのが楽

全角半角空白だけを削除する例
str0<-" あ い "    #   (SPC)あ(SPC)い(SPC)
(str1<-gsub(" ","",str0))  #   まず半角空白削除
[1] " あ い"
(str2<-gsub(" ","",str1)) #   次に全角空白削除
[1] "あい "

 結局、これが一番簡単そうです。もちろん、全角半角を逆にしても構いません。

使用例
str0<-"山本県 鈴木市 本町 3ー1ー1       "
str1<-gsub(" ","",str0)    #   まず半角空白削除
(str2<-gsub(" ","",str1)) #   次に全角空白削除
[1] "山本県鈴木市本町3ー1ー1"

 結論としては、空白に限らず、\t\n\r、何であれ、削除したいものを明示するのが一番楽そうです。