web-dev-qa-db-ja.com

小数点記号としてカンマを使用して数値を読み取る方法は?

小数点の代わりにカンマを使用して、つまり_0,5_の代わりに_0.5_を使用して、数値がヨーロッパスタイルでフォーマットされた一連のCSVファイルがあります。

これらのファイルが多すぎるため、Rにインポートする前に編集できません。read.csv()関数の簡単なパラメーター、またはRが文字列ではなく数値としてのデータ。

27
klonq

?read.tableをチェックすると、おそらく必要な答えがすべて見つかるでしょう。

(大陸の)ヨーロッパのcsvファイルには2つの問題があります。

  1. Csvのcは何を表していますか?標準のcsvの場合、これは,です。ヨーロッパのcsvの場合、これは;です。
    sepは、read.tableの対応する引数です
  2. 小数点の文字は何ですか?標準のcsvの場合、これは.です。ヨーロッパのcsvの場合、これは,です。
    decは、read.tableの対応する引数です

標準のcsvを読み取るにはread.csvを使用し、ヨーロッパのcsvを読み取るにはread.csv2を使用します。これらの2つの関数は、適切な引数を設定するread.tableの単なるラッパーです。

ファイルがこれらの標準のいずれにも従わない場合は、引数を手動で設定します。

41
Henrik

?read.tableから:

dec     the character used in the file for decimal points.

はい、read.csvにも使用できます。 (私には:バカじゃない、できません!)

または、使用することもできます

read.csv2

これは、「、」小数点区切り文字と「;」を想定しています。列セパレーター用。

12
aL3xa
read.csv(... , sep=";")

このインポートされたフィールドが「amount」と呼ばれると仮定すると、数字が文字として読み込まれている場合、この方法でタイプを修正できます。

d$amount <- sub(",",".",d$amount)
d$amount <- as.numeric(d$amount)

これは、ExcelまたはExcel csvからインポートするときに、他の小さな煩わしさとともに頻繁に発生します。 Rにインポートするときに期待するものを確実に取得するための一貫した方法はないと思われるため、事後修正が最良の方法であると思われます。つまり、インポートした内容を確認します。予期したとおりであることを確認し、そうでない場合は修正します。

3

欠損値がどのように表されるかを示すと(na.strings = ...)、問題が解決する場合もあります。たとえば、ここのV1とV2は同じ形式(csvファイルでは「、」で区切られた10進数)ですが、NAはV1に存在するため、因子として解釈されます:

dat <- read.csv2("...csv", header=TRUE)
head(dat)

> ID x    time    V1    V2
> 1  1   0:01:00 0,237 0.621
> 2  1   0:02:00 0,242 0.675
> 3  1   0:03:00 0,232 0.398


dat <- read.csv2("...csv", header=TRUE, na.strings="---")
head(dat)

> ID x    time    V1    V2
> 1  1   0:01:00 0.237 0.621
> 2  1   0:02:00 0.242 0.675
> 3  1   0:03:00 0.232 0.398
2
verena

次のように使用できます。

mydata <-read.table(fileIn、dec = "、")

入力ファイル(fileIn):

D:\ TEST> more input2.txt

06-05-2014 09:19:38 3,182534 0

06-05-2014 09:19:51 4,2311 0

2
Lowreno

多分

as.is=T

これはまた、文字列を因子に変換することを防ぎます

1
dmeu

上記のブランドンの答えに追加するだけで、私にとってはうまくいきました(コメントするのに十分な担当者がいません):

使用している場合

_    d$amount <- sub(",",".",d$amount)
    d$amount <- as.numeric(d$amount)
_

_._文字を回避するためにsub("[.]", "", d$amount, Perl=T)が必要になることを忘れないでください。

0
RobertMyles