2017-06-20 5 views
1

freadでcsvファイルを読み取り、colClassesを使用して列を数値として読み取るときドットではなくコンマで区切られたデータで問題があります。データファイルの原点が異なるため、 "。"および小数点区切りR:異なる小数点のセパレータを持つfread複数のファイル

dt <- data.table(a=c("1,4","2,0","4,5","3,5","6,9"),c=(10:14)) 
write.csv(dt,"dt.csv",row.names=F) 
dcsv <- fread("dt.csv", colClasses = list(numeric = 1:2), dec = ","). 

などの一部の使用は「」私は2つの問題を持っている: 私は数字として両方の列を読みたいです。だから私はdec = ","を使ってみました。今私はerror: Column number 2 (colClasses[[1]][2]) is out of range [1,ncol=1] colClasses = list(numeric = 1)に変更しましたが、これはあまり理解していません。

まだ最初の列は数値ではなく文字型です。

dec.,に変更するにはどのような種類の小数点記号が使用されているかわからないので、どうすればよいですか。私はベクトルを試みましたが、うまくいきませんでした。私は何が欠けていますか?助けてくれてありがとう!

答えて

1

2つの異なるタイプの数値区切りを持つファイルを持つことは正常ではありません。

最初にファイルのソースに質問する必要があります。

しかし、このようなファイルをお持ちの場合は、カンマ区切りの変数を文字列として使用して読み込み、数値に変換してください。

library(data.table) 

dt <- data.table(a=c("1,4","2,0","4,5","3,5","6,9"),c=(10:14)) 
write.csv(dt,"dt.csv",row.names=F) 
dcsv <- fread("dt.csv", dec = ".") 
dcsv[, a:= as.numeric(gsub("\"", "", gsub(",", ".", a)))] 

あなたの変数はコンマやドット区切りであるかどうかがわからない場合、あなたは、変数をループが変数のみ番号やカンマで文字列があるかどうかをテストし、履行だけのものに変換することができますその状態。

+0

私は自分自身をはっきりと表現していませんでした。申し訳ありません。私は 'fread'を介して読み込みたい異なるファイルの異なるタイプの数値区切りを意味していました。したがって、file1は '.'を使用し、file2は'、 'などを使用します。あなたの答えをありがとう! – Rivka

関連する問題