質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

Q&A

解決済

1回答

3245閲覧

膨大な列からなるCSVファイルを型を指定して読み込みたい read.csv(colClasses="")

yyuki0810

総合スコア1

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

0グッド

0クリップ

投稿2020/06/13 06:20

編集2020/06/13 07:15

膨大な列からなるCSVファイルを効率的に読み込みたい。

動作環境 R studio

Rでcsvファイル(factor,integer,dateが混在した100列以上からなる)を型を指定して、効率よく読みたいです。型を指定するため、read.csv(...,colClasses=c(...))を活用しようとしています。しかし、integerを指定するとエラーが発生しまうのでうが原因がわかりません。

scan(file = file, what = what, sep = sep, quote = quote, dec = dec, でエラー:
scan() 関数は 'an integer' を期待したのに、得られたのは '"1"' でした

サンプルデータの作成

x<-c(sample(1:100,10))/100
y<-c(sample(letters,10))
z<-c(sample(1000:1100,10))/10
x2<-c(sample(1:100,10))
y2<-c(sample(c("OK","NG"),10,replace=T))
dt<-data.frame(lot=x,name=y,item=z,item2=x2,result=y2)
Names<names(dt)
write.csv(dt,file="sample.csv")
rm(dt)

dt.head<-read.csv("sample.csv",nrow=3)
classes<-as.vector(sapply(df.head,class))
Name<-names(dt)

型を指定するとscan()エラが発生する。

read.csv("sample.csv",colClasses=classes,fileEncoding="UTF-8",fill=TRUE,col.names=Name)

すべて"character"として読み込む

read.csv("sample.csv",colClasses="character",fileEncoding="UTF-8",fill=TRUE,col.names=Name)->df2
sapply(df2,class)

どうやらはじめのintegerでエラが発生している

print(classes)

 エラー箇所を回避する。

read.csv("sample.csv",colClasses=c("character","numeric","factor","numeric","integer","factor"),fileEncoding="UTF-8",fill=TRUE,col.names=Name)->df3
sapply(df3,class)

#参考文献
#http://www.asnm4.com/2014/05/factorと数値型の変換/

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

scan() 関数は 'an integer' を期待したのに、得られたのは '"1"' でした

直接的な原因はここにあります。1でなければならないところ"1"になっていたので整数値として扱えないとして文句を言っているわけです。Rの関数はいろいろと融通が利きません。

で、なぜそんなことが起こるのかですが、テストデータの作成過程において実行されているwrite.csv(dt,file="sample.csv")が、勝手に行番号を各行の先頭に付加するからです。Rの関数はいろいろと要らんことをしてきます。しかも、行「番号」なら普通に数字だけ出力すればいいものを、わざわざ引用符をつけやがります。Rの関数は頭が悪いですね。
邪魔なので、オプションをつけてこれを止めさせます。

write.csv(dt,file="sample.csv", row.names=NULL)

これでエラーは出なくなるでしょう。

なお、この問題はRからでてsample.csvを出力させてみればすぐに気が付けたと思いますよ。

投稿2020/06/13 07:36

KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問