読者です 読者をやめる 読者になる 読者になる

StatsBeginner: 初学者の統計学習ノート

初学者が統計学、機械学習、R、Pythonの勉強の過程をメモっていくノート。

Rメモ:read.csv/write.csvで読み込んだり書き出したりするときの注意点

 Rで、CSVのデータを読み込んだり書き出したりするときに、引数をちゃんと設定してなくてミスることがありますね。
 いやべつに大したことではなくて、私のような初心者レベルですら「当たり前」なことではあるんですが、今日あるデータを分析してて一部ミスってたものがあったので改めて注意しなきゃなと思いました。

# データxをCSVでファイルを出力する
write.csv(x, "x.csv", quote=FALSE, row.names=FALSE)


 quote=FALSEにすると、データに引用符の""がつかないCSVが出力されます。TRUEにすると、因子型とか文字列型のデータは1個1個の値が""で囲まれます。いずれにしてもちゃんと指定しておかないと、ミスるときありそうですね。デフォルトではTRUEになってるようです。
 あと、row.names=FALSEってしておかないと、行列の行番号がそのままCSVの1列目のデータとして出力されてしまいますね。ちなみにquote=TRUEの場合、行番号にも""がつきます。

> data  # こういうデータがあるとする
   X1 X2 X3 X4  X5
1   1 21 41 61  81
2   2 22 42 62  82
3   3 23 43 63  83
4   4 24 44 64  84
 (省略)
17 17 37 57 77  97
18 18 38 58 78  98
19 19 39 59 79  99
20 20 40 60 80 100
> data[,5] <- as.character(data[,5])  # 5列目だけ文字列型に変える
> write.csv(data, "~/Desktop/data.csv", row.names=TRUE, quote=TRUE)  #デスクトップにCSV出力


f:id:midnightseminar:20140901125445p:plain


 みづらいですが、右端のデータだけ"81"みたいになっています。あと、行番号も出力しているので全部で6列になっていますね。


 今日、ある調査結果の生データをいったん取り込んで、ちょっとした加工を施したあと、保存したら行番号が1列目に追加されて全体の列数が1列増えていたのに気づかず、そのCSVをまたべつの処理で取り込んだりしてていろいろ間違ってしまいました……orz。
 まぁ、そもそもいったんCSVを吐き出してまた取り込むなんてことをせずに、R内でデータを使い続ければよかったのですが。


 あと逆に、CSVを取り込むときの指定としては、

# CSVを読み込む
x <- read.csv("x.csv", header=TRUE, skip=0)


 というふうに、header(いわゆるタイトルレコード)の有無と、それより上にコメントとか入ってたらskip=行数で飛ばすぐらいですね。デフォルトだとheader=TRUE、skip=0になり、実際それでOKなデータがほとんどな気もするので、指定しない場合が多いとは思いますが。


 以上、初歩的すぎる話でした。