LoginSignup
3
2

More than 5 years have passed since last update.

read.csv()でうまく読み込めない場合の対処

Posted at

データの読み込みでつまづいたので対処法をメモ。
read.csv()でデータを読み込んで下記のエラーメッセージが出力されました。

data<-read.csv("data/2910.csv",fileEncoding="Shift_JIS")
 警告メッセージ: 
 scan(file = file, what = what, sep = sep, quote = quote, dec = dec,  : 
   入力コネクション 'data/2910.csv' に不正な入力がありました 

本来500行くらいあるデータベースですが、17行しか読み込めていません。

nrow(data)
[1] 17

read.table()で区切り文字を指定して読み込んでみましたが、今度は別のエラーメッセージが出力されました。
データ内の文字列のどこかに「,」が入っているのかもしれませんが、ちょっと探せませんでした。
そもそも、エクセルなどでは普通に開けるので、Rで開けない理由がよくわかりません。

data<-read.table("data/2910.csv",sep=",",fileEncoding="Shift_JIS")
 警告メッセージ: 
1:  scan(file = file, what = what, sep = sep, quote = quote, dec = dec,  : 
   入力コネクション 'data/2910.csv' に不正な入力がありました 
2:  scan(file = file, what = what, sep = sep, quote = quote, dec = dec,  : 
   読み込まれた項目数が列数の倍数ではありませんでした 

なぜか1行増えて18行目まで読めていました。

nrow(data)
[1] 18 

いろいろ試したのですが、うまくいかず、最終的にfread()での読み込みに成功しました。
行数も505行で全部読み込めています。

install.packages("data.table")
library(data.table)

data<-fread("data2/2910.csv") 
nrow(data)
[1] 505

fread()はShift_JISに対応していないので、あらかじめ文字コードをUTF-8に変換しておきます。
ディレクトリ内の文字コード一括変換は以下のコマンドにて行いました。

find -name '*.csv' | xargs nkf --overwrite -w

以下の情報を参考にしました。
【linux】ファイルの文字コードを変換する。vi、iconv、nkf (nkfの文字コード判定とか一括変換は便利)

最終的にやりたかったのは以下のコードです。
ディレクトリ「data2」のcsvファイルを全部マージしてdata.frameにします。
1万行くらい読み込めているので、たぶん全部読み込めたのだろうと思います。

csv<-list.files("data2",full.names=T)%>%
lapply(fread,header=TRUE,sep=',',encoding="UTF-8")
data<- do.call(rbind, csv)

nrow(data)
[1] 11142

月ごとにデータのヒストグラムが作成できたので成功です。

01.png

3
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2