R言語でcsvファイルを操作する方法を解説します。
csvファイルの読み込みや書き込みに用いる関数とその実行例について見ていきます。
単純な読み込みと書き込みだけでなく、csvファイルに追記する例も紹介します。
今回紹介するプログラミングコードは以下からダウンロードすることができます。
R言語 csvファイル
エクセルファイルの操作については次の記事を参照してください。
R言語 エクセルに色を塗る【自作関数】
こんにちは、usagi-sanです。今回は、R言語でエクセルファイルに色を塗る方法を紹介します。 統計解析を行う中で、解析結果の表などをエクセルに保存することがあると思います。解析結果を見やすくするた ...
続きを見る
csvファイルの操作
csvファイルの操作に関する関数を以下にまとめました。
csvファイルの読み込みと書き込みに用いる関数は以下の通りです。
read.csv
関数read.csvはcsvファイル中のデータをデータフレームとして読み込む関数です。
以下、関数read.csvとその引数の説明です。
dec = ".", numerals = c("allow.loss", "warn.loss", "no.loss"),
row.names, col.names, as.is = !stringsAsFactors,
na.strings = "NA", colClasses = NA, nrows = -1,
skip = 0, check.names = TRUE, fill = !blank.lines.skip,
strip.white = FALSE, blank.lines.skip = TRUE,
comment.char = "#",
allowEscapes = FALSE, flush = FALSE,
stringsAsFactors = default.stringsAsFactors(),
fileEncoding = "", encoding = "unknown", text, skipNul = FALSE)
read.csv(file, header = TRUE, sep = ",", quote = "\"",
dec = ".", fill = TRUE, comment.char = "", …)
read.csv2(file, header = TRUE, sep = ";", quote = "\"",
dec = ",", fill = TRUE, comment.char = "", …)
read.delim(file, header = TRUE, sep = "\t", quote = "\"",
dec = ".", fill = TRUE, comment.char = "", …)
read.delim2(file, header = TRUE, sep = "\t", quote = "\"",
dec = ",", fill = TRUE, comment.char = "", …)
file | character型。読む込むファイル名。 |
header | logical型。ファイルの一行目を列名として読み込むかどうか。 |
sep | 区切り文字。 |
quote | 引用符に用いる文字列。 |
dec | 小数の桁数。 |
numerals | どのように数値を変換するかどうか。 |
row.names | データの行名。 |
col.names | データの列名。 |
as.is | character型の変数をどのよう変換するかどうか。 |
na.strings | 欠測値を表す文字列。NA、"NULL"、"factor"、"Date"、"POSIXct"が指定できる。 |
colClasses | character型。列の型を指定する。 |
nrows | 整数。この行までのデータが読み込まれる。 |
skip | 整数。スキップするデータの行。 |
check.names | logical型。TRUEのとき、データフレームの名前が構文的に正しいかどうかチェックする。 |
fill | logical型。TRUEのとき、違う長さの行があるとき、空白が加えられる。 |
strip.white | logical型。sepが指定されているときに用いる。引用符が使われていないcharacter型のフィールドから空白文字の前後を削除する。 |
blank.lines.skip | logical型。TRUEのとき空白行が無視される。 |
comment.char | character型。1文字からなるベクトル。コメント行であるか判断する際に用いる。 |
allowEscapes | logical型。Cスタイルのエスケープ文字、例えば\nを適用するかどうか。 |
flush | logical型。TRUEのとき、最終行の余分なフィールドがコメントとして扱われる。 |
stringsAsFactors | logical型。character型のベクトルをfactor型に変換するかどうか。 |
fileEncoding | character型。ファイル中の文字列のエンコーディング方法。指定した方法で再びエンコーディングされる。 |
encoding | 入力された文字列のエンコーディング。Latin-1またはUTF-8であるか指定するのに用いる。 |
text | 数fileが指定されていない状態でtextにデータを記述すると、そのデータが読み込まれる。 |
skipNul | logical型。NULLをスキップするかどうか。 |
... | read.tableに渡す他の引数。 |
write.csv
関数write.csvはcsvファイルに出力する関数です。
以下、関数write.csvとその引数の説明です。
eol = "\n", na = "NA", dec = ".", row.names = TRUE,
col.names = TRUE, qmethod = c("escape", "double"),
fileEncoding = "")
write.csv(…)
write.csv2(…)
x | ファイルに書き出すオブジェクト。行列またはデータフレームが望ましい、そうでない場合データフレームに変換できるようなオブジェクト。 |
file | character型。出力するファイル名。 |
append | logical型。TRUEの場合、追記を行う。 |
quote | logical型またはnumeric型のベクトル。TRUEの場合、characterまたはfactor型の列が全てダブルクオーテーション“”で囲まれる。numeric型の場合、そのインデックスの要素がダブルクオーテーションで囲まれる。 |
sep | character型。区切り文字。xの各要素がこの文字で区切られる。 |
eol | 最終行にプリントする文字。 |
na | 欠測値に用いる文字列。 |
dec | numericまたはcomplex型の小数点を表す文字。 |
row.names | logical型またはcharacter型のベクトル。TRUEの場合、行名を出力する。character型のベクトルの場合、そのベクトルが行名として出力される。 |
col.names | logical型またはcharacter型のベクトル。TRUEの場合、列名を出力する。character型のベクトルの場合、そのベクトルが行名として出力される。 |
qmethod | character型。引用符を用いる際の「"」の処理を指定する文字列。"escape"で引用符はバックススラッシュを使う方法で回避される。"double"の場合、引用符二重となる。 |
fileEncoding | character型。ファイルエンコーディング。 |
... | write.tableに渡す引数。append、col.names、sep、dec、qmethodは変更できない。 |
実行例
csvファイルの読み込みと書き込み方法をそれぞれ解説していきます。
csvファイルの読み込み
まず、csvファイルの読み込みについて見ていきます。
次のデータセットirisが保存されたcsvファイルを読み込む方法について紹介します。
csvファイルを読み込むには、次のようにread.csvを用います。
引数にcsvファイルの名前を渡すことでファイルを読み込むことができます。
関数read.csv以外にもread.csv2やread.tableでcsvファイルを読み込むことができます。
read.tableで読み込む場合は区切り文字などの引数を設定する必要があります。
1 2 3 4 | dataset <- read.csv("iris.csv") read.csv2("iris.csv") read.table("iris.csv", header = TRUE, sep = ",", quote = "\"", dec = ".", fill = TRUE, comment.char = "") |
datasetを参照するとcsvファイル中のirisのデータがデータフレームとなっているのが確認できます。
1 2 3 4 5 6 7 8 | > head(dataset) Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1 5.1 3.5 1.4 0.2 setosa 2 4.9 3.0 1.4 0.2 setosa 3 4.7 3.2 1.3 0.2 setosa 4 4.6 3.1 1.5 0.2 setosa 5 5.0 3.6 1.4 0.2 setosa 6 5.4 3.9 1.7 0.4 setosa |
また、次のような空白行があるデータや長さの異なる行が存在するファイルを読み込むときは、少し工夫が要ります。
このようなデータを読み込む場合、read.csvではなくread.tableを用います。
次のように引数col.namesを最大の列数に合わせて、blank.lines.skipをFALSEにすることで、ファイル中の形を保った状態で読み込むことができます。
1 2 3 | summary_and_data <- read.table("iris_summary_and_data.csv", header = FALSE, sep = ",", dec = ".", col.names = paste0("V",seq_len(5)), fill = TRUE, blank.lines.skip = FALSE) |
summary_and_dataを参照すると次のように形を保ったままデータフレームとして読み込んでいるのが分かります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | > head(summary_and_data, 20) V1 V2 V3 V4 V5 1 Sepal.Length Sepal.Width Petal.Length Petal.Width 2 Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100 3 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300 4 Median :5.800 Median :3.000 Median :4.350 Median :1.300 5 Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199 6 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800 7 Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500 8 9 Sepal.Length Sepal.Width Petal.Length Petal.Width Species 10 5.1 3.5 1.4 0.2 setosa 11 4.9 3 1.4 0.2 setosa 12 4.7 3.2 1.3 0.2 setosa 13 4.6 3.1 1.5 0.2 setosa 14 5 3.6 1.4 0.2 setosa 15 5.4 3.9 1.7 0.4 setosa 16 4.6 3.4 1.4 0.3 setosa 17 5 3.4 1.5 0.2 setosa 18 4.4 2.9 1.4 0.2 setosa 19 4.9 3.1 1.5 0.1 setosa 20 5.4 3.7 1.5 0.2 setosa |
csvファイルの書き込み
次にcsvファイルの書き込みについて見ていきます。
次のirisのsummaryをcsvファイルに保存する例について紹介します。
1 2 3 4 5 6 7 8 9 | > summary_data <- summary(dataset) > summary_data Sepal.Length Sepal.Width Petal.Length Petal.Width Species Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100 Length:150 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300 Class :character Median :5.800 Median :3.000 Median :4.350 Median :1.300 Mode :character Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800 Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500 |
csvファイルに保存するには次のように関数write.csvを実行します。
第一引数に保存したいデータフレーム、第二引数にファイル名を渡すだけです。
write.csv2でも同様に実行することでcsvファイルの保存ができます。
read.tableで保存する場合は、引数sep、dec、qmethodを以下のように設定する必要があります。
1 2 3 | write.csv(summary_data, "summary_iris.csv", row.names = FALSE) write.csv2(summary_data, "summary_iris.csv", row.names = FALSE) write.table(summary_data, sep = ",", dec = ".", qmethod = "double", row.names = FALSE) |
実行すると下の画像のsummary_iris.csvが作業ディレクトリに保存されます。
既存のcsvファイルに追記したい場合は、次のように引数appendをTRUEにします。
注意として、write.csvではappendの変更ができないため、csvファイルの追記を行うときはwrite.tableで行う必要があります。
次のfor文を実行すると、各irisの変数ごとの平均と分散がcsvファイルに出力されます。
1 2 3 4 5 6 7 8 9 | for (colName in colnames(dataset[, colnames(dataset) != "Species"])) {#ファイルの追記 stats <- data.frame(mean = mean(dataset[, colName]), var = var(dataset[, colName])) write.table(colName, "stats_iris.csv", append = TRUE, sep = ",", dec = ".", qmethod = "double", row.names = FALSE, col.names = FALSE) write.table(stats, "stats_iris.csv", append = TRUE, sep = ",", dec = ".", qmethod = "double", row.names = FALSE) write.table("", "stats_iris.csv", append = TRUE, sep = ",", dec = ".", qmethod = "double", row.names = FALSE, col.names = FALSE) } |
まとめ
R言語でのcsvファイルの操作方法を紹介しました。
read.csvでcsvファイルの読み込み、write.csvでcsvファイルの書き込みを行うことができます。