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

一所懸命に手抜きする

監査の仕事をしています。ITを利用し、良い意味で「手抜き」することは効率化と精度アップに役立つと思うんです。部下への引き継ぎのためにまずは諸々頭から引っ張り出そうとブログを始めました。

[ Main ]  [ 別館 ]
当ブログで取り上げられている事案やデータベース、人物等はすべてフィクションです。

write.csv() で簡単にCSV出力。ただしrow.names=TRUE/FALSEを意識する必要あり (R言語)

データやり取りはCSVが基本

 企業では Excel がデータソースとなることが多いですが、学究の場などでは CSV が基本ではないかと思います。

CSVやTSVを書き出すのは簡単です

  参考 R: Data Output

write.csv()で簡単にCSVが出力できます

 Rで処理したデータフレームをCSVに書き出すのは 標準関数 write.csv() で簡単にできます。

write.csv(.Dataset, "C:/Wrk/abc.csv")

 これだけでCSVが出力されます。簡単です。
 しかし、引数を指定しなくても良いということは、デフォルトで引数が指定されていたり、そもそも関数の動作が限定されているということです。write.csv() は write.table() の wrapper であり、write.table()に渡す引数を限定しています。意図せぬ形式にならないように write.table の説明をよく読むべきです。

write.table()

 元になっている write.table() は

Rの標準関数 write.table()
 write.table(.Dataset, FilePath,append = FALSE, quote = TRUE, sep = " ",
            eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = TRUE,
            qmethod = c("escape", "double"),fileEncoding = "")
write.csv()

write.table() の wrapper である write.csv() は

Rの標準関数 write.csv()
 write.csv(x, file = "", append = FALSE, quote = TRUE, sep = ",",
            eol = "\n", na = "NA", dec = ".", row.names = TRUE,
            col.names = NA, qmethod = "double",
            fileEncoding = "")

write.tableとの相違点
 1. append, col.names, sep, dec, qmethod は変更できない。
 2. sep = "," 固定
 3. dec = "." 固定
 4. col.names = NA(行見出しの上に空)
 5. qmethod = "double" 固定
これらは CSV ファイルであることを厳格に担保するための引数固定なのでありがたい配慮ではありますが、デフォルトだと row.names=TRUE となっていて行見出しが一番左端に出力されます。

##  支社番号 支社名 支店番号 支店名
##1       10   札幌       11   札幌
##2       20   東京       21 大手町
##3       20   東京       22 秋葉原
##4       20   東京       23   横浜

 行見出しは行番号とは決まっておらず、

##         テスト  算数 国語
##山田太郎     11  100    90
##鈴木花子     11   90    80

 のような observation ID を用いることもあります。

書き出したCSVを読み込むときの注意

write.csv(row.names=TRUE) で書き出した CSV は read.csv(row.names=1) で読み込む。

 write.csv() はデフォルトだと row.names=TRUE なので行見出し付きで出力します。

    # デフォルトだと row.names=TRUE
write.csv(.Dataset, "C:/Wrk/abc.csv")

    # 引数を正しく指定しないと…
read.csv("C:/Wrk/abc.csv")
##  X 支社番号 支社名 支店番号 支店名
##1 1       10   札幌       11   札幌
##2 2       20   東京       21 大手町
##3 3       20   東京       22 秋葉原
##4 4       20   東京       23   横浜

    # row.names=1で左端が行名と伝えると
read.csv("C:/Wrk/abc.csv",row.names=1)
##  支社番号 支社名 支店番号 支店名
##1       10   札幌       11   札幌
##2       20   東京       21 大手町
##3       20   東京       22 秋葉原
##4       20   東京       23   横浜

 このケースはデフォルトの row.names=TRUE なので行見出し付きで出力しました。
 read.csv()する際、オプションを指定しないと行見出しをデータとして読み込んで意図しないことになります。
   read.csv()する際、row.names=1 と1列が見出しだと教えてやると正しく読み込めます。
 

write.csv(row.names=FALSE) で書き出した CSV は read.csv() でそのまま読み込める。
write.csv(.Dataset, "C:/Wrk/abc.csv",row.names=FALSE)
read.csv("C:/Wrk/abc.csv")
##  支社番号 支社名 支店番号 支店名
##1       10   札幌       11   札幌
##2       20   東京       21 大手町
##3       20   東京       22 秋葉原
##4       20   東京       23   横浜
広告を非表示にする