web-dev-qa-db-ja.com

ドットを数値のコンマに変換する

データフレームがある場合:

a   b  
2.4 4.6
3.6 66.7
5.8 44.6

Aとbはどちらも数値です。

「。」を変換したい「、」へ

df$a <- as.numeric(gsub(".", ",", df$a))

しかし、私はいつも得ます

Warning message:NAs introduced by coercion

そして、すべての値がNAに変換されます。どうして?

7
Manuel Frias

_._はどの記号にも一致するため、最初のアイデアはほぼ正しかったのですが、正規表現だけが間違っていました。次のようなものが必要です(これにより、数値ベクトルが文字ベクトルに変換されます)

_df$a <- gsub("\\.", ",", df$a)
_

また、R印刷、プロット、およびas.character関数のアクションからの出力を変更することもできます。次の方法でデフォルトから変更します。

options(OutDec= ",")

また、別のオプションはformat関数を使用することです。

_format(df, decimal.mark=",")
_

内部的に数値は倍精度浮動小数点数として格納されるため、数値の出力(出力)方法に関心があると思います(pdate @digemallによるコメントのおかげで)。また、_read.table_のような関数の場合、小数点記号が_,_であると明確に指定されていない限り、デフォルトでは_,_が関数の引数の区切りに使用されるため、それ以外のことはできません。

そして、NAはまさにその理由で導入されました(誤った正規表現は別として)。

_df$a <- as.numeric(gsub("\\.", ",", df$a))
_

デフォルトでは、パーサーは_,_が小数点記号として使用されていることを認識していません。

15

印刷にコンマのみが必要な場合は、次の形式を使用できます。

data <- data.frame(a=rnorm(5), b=rnorm(5))
format(data, decimal.mark=",")
              a          b
1   1,058878354  0,1812629
2   1,026163906 -0,6666500
3   1,538423889 -1,4206752
4  -0,561585916 -0,4729558
5  -0,004685406  1,0744514

ただし、これによって外観が変わるだけです。割り当てには引き続きドットを使用する必要があります。

OSXまたはWindowsを使用していますか、それとも...?

表現を変更するには、LC_NUMERICパラメーターを確認しますが、Rのドキュメントでは、これを変更するとRが奇妙に動作する可能性があると警告されています(リストの定義にも使用される場合、,を10進数として使用するのは困難です)。 ...)

> Sys.getlocale("LC_NUMERIC")
[1] "C"
> a=c(1.01,2.01)
> a
[1] 1.01 2.01
> Sys.setlocale("LC_NUMERIC", "de_DE") # this is OSX syntax
> a
[1] 1,01 2,01

一緒に暮らすだけの方が安全かもしれません!

2
beroe