小数点の代わりにカンマを使用して、つまり_0,5
_の代わりに_0.5
_を使用して、数値がヨーロッパスタイルでフォーマットされた一連のCSVファイルがあります。
これらのファイルが多すぎるため、Rにインポートする前に編集できません。read.csv()
関数の簡単なパラメーター、またはRが文字列ではなく数値としてのデータ。
?read.table
をチェックすると、おそらく必要な答えがすべて見つかるでしょう。
(大陸の)ヨーロッパのcsvファイルには2つの問題があります。
c
は何を表していますか?標準のcsvの場合、これは,
です。ヨーロッパのcsvの場合、これは;
です。sep
は、read.table
の対応する引数です.
です。ヨーロッパのcsvの場合、これは,
です。dec
は、read.table
の対応する引数です標準のcsvを読み取るにはread.csv
を使用し、ヨーロッパのcsvを読み取るにはread.csv2
を使用します。これらの2つの関数は、適切な引数を設定するread.table
の単なるラッパーです。
ファイルがこれらの標準のいずれにも従わない場合は、引数を手動で設定します。
?read.table
から:
dec the character used in the file for decimal points.
はい、read.csv
にも使用できます。 (私には:バカじゃない、できません!)
または、使用することもできます
read.csv2
これは、「、」小数点区切り文字と「;」を想定しています。列セパレーター用。
read.csv(... , sep=";")
このインポートされたフィールドが「amount」と呼ばれると仮定すると、数字が文字として読み込まれている場合、この方法でタイプを修正できます。
d$amount <- sub(",",".",d$amount)
d$amount <- as.numeric(d$amount)
これは、ExcelまたはExcel csvからインポートするときに、他の小さな煩わしさとともに頻繁に発生します。 Rにインポートするときに期待するものを確実に取得するための一貫した方法はないと思われるため、事後修正が最良の方法であると思われます。つまり、インポートした内容を確認します。予期したとおりであることを確認し、そうでない場合は修正します。
欠損値がどのように表されるかを示すと(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
次のように使用できます。
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
多分
as.is=T
これはまた、文字列を因子に変換することを防ぎます
上記のブランドンの答えに追加するだけで、私にとってはうまくいきました(コメントするのに十分な担当者がいません):
使用している場合
_ d$amount <- sub(",",".",d$amount)
d$amount <- as.numeric(d$amount)
_
_.
_文字を回避するためにsub("[.]", "", d$amount, Perl=T)
が必要になることを忘れないでください。