3

測定単位を含む国際的にフォーマットされた数値(つまり文字列)を含むファイルがあります。この場合、小数点以下は「、」で示され、1e3セパレーターは「。」で示されます。(つまり、ドイツの数値形式)。

a <- c('2.200.222   €',
       '  180.109,3 €')

また

b <- c('28,42 m²',
       '47,70 m²')

これらの文字列を効率的にに変換したいと思いますnumeric。私は次のようなコードで数字を除外しようとしました

require(stringr)
str_extract(a, pattern='[0-9]+.[0-9]+.[0-9]+')
str_extract(b, pattern='[0-9]+,[0-9]+')

ただし、これはエラーが発生しやすいようであり、より標準化された方法が必要だと思います。だからここに私の質問があります:そのような問題を引き起こす可能性のあるカスタム関数、パッケージ、または何か他のものはありますか?

どうもありがとうございます!

4

1 に答える 1

8

gsub投稿したサンプルデータを処理するために使用する関数は次のとおりです。

x <- c('2.200.222   €', '  180.109,3 €', '28,42 m²', '47,70 m²')

strip <- function(x){
  z <- gsub("[^0-9,.]", "", x)
  z <- gsub("\\.", "", z)
  gsub(",", ".", z)
}

as.numeric(strip(x))
[1] 2200222.00  180109.30      28.42      47.70

それはこのように動作します:

  1. 最初に、末尾の非数字 (およびこれらの非数字の後にあるもの) をすべて取り除きます。
  2. 次に、すべてのピリオドを取り除きます。
  3. 最後に、コンマをピリオドに変換します。
于 2012-11-12T12:55:26.147 に答える