一所懸命に手抜きする

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

文字列の左側/右側/両側の半角空白や\t\r\nを削除するR関数 trimws()

ASから取得した文字列には右側に空白が…

   AS400からデータを取得すると文字列に空白がついてきて困ることがあります。これはAS400内部では固定長でデータが管理されているからですが、PCにデータを取得すると文字列は左寄せで右側に空白がついてきます。文字型の場合、たった1文字でもたとえば100文字分確保されていればその分の空白がついてきます。
 この右側の空白を取り除くにはどうすればよいのでしょうか。
 多くのプログラミング言語にはtrimという関数がありますが…。R にも標準で trimws() 関数( R: Remove Leading/Trailing Whitespace )があります。Trim white space の省略のようです。
 さっそく使ってみると…

StudentName # ASから取得した文字列  
"山田 太郎           "  
trimws(StudentName)
"山田 太郎           "  

 trimws() をかけても変わっていません。右側の全角空白が残っています。うーむ。

trimws() 使用例

 trimws() の使い方を調べてみます。

半角空白を含む文字列全角空白を含む文字列
strH<-c(" あ い ")
# 両側の半角空白削除
trimws(strH)
[1] "あ い"
# 左側の半角空白削除
trimws(strH, "l")
[1] "あ い "
# 右側の半角空白削除
trimws(strH, "r")
[1] " あ い"
strZ<-c(" あ い ")

trimws(strZ)
[1] " あ い "

trimws(strZ, "l")
[1] " あ い "

trimws(strZ, "r")
[1] " あ い "
両側/左/右の半角空白削除成功 全角空白は削除できず

trimws() 使用上の注意

  1. trimws() は文字列の中にはさまっている空白は除去できません。
  2. trimws() 単体では半角空白には対応していますが、全角空白には対応していないことに注意が必要です。VBAなどは半角全角問わず空白を除去できますので注意が必要です。
  3. trimws() でいう空白とは半角空白、\t、\r、\n のことです。R: Remove Leading/Trailing Whitespace  このあたりはVB.NETなどと挙動が似ていますね。   
    \t \r \n
    trimws("\tTAB\t")
    [1] "TAB"
    trimws("\rLF\r")
    [1] "LF"
    trimws("\nRET\n")
    [1] "RET"
     除去したいのはあくまで空白だけだという場合には trimws() は使えないようです。

str_trim()関数

 ライブラリ stringr に含まれている str_trim() 関数も指定方法、挙動が全く同じように思われます。

結局どうしましょうか

考えられるのは
・全角空白を半角2個に置き換えてから trimws()
・全角対応の関数を作成する。
なんですが。