読者です 読者をやめる 読者になる 読者になる

一所懸命に手抜きする

監査の仕事をしています。ITを利用し、良い意味で「手抜き」することは効率化と精度アップに役立つと思うんです。部下への引き継ぎのためにまずは諸々頭から引っ張り出そうとブログを始めました。

[ Main ]  [ 別館 ]
当ブログで取り上げられている事案やデータベース、人物等はすべてフィクションです。

文字列の左側/右側/両側の半角空白や\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()
・全角対応の関数を作成する。
なんですが。

広告を非表示にする