HOWTO · R
RでデータフレームをCSVにエクスポート
write.csv()、write.table()、data.table::fwrite()、readr::write_csv() を使って、R のデータフレームを CSV にエクスポートする方法を説明します。
このページの内容
Base R の write.csv() を使うと、データフレームをカンマ区切りファイルとして保存できます。区切り文字を自分で指定したい場合は write.table() を使います。data.table::fwrite() と readr::write_csv() も、パッケージで提供される選択肢です。以下の例では、1つの小さなデータフレームを使い、各ファイルの保存先と行名が含まれるかどうかを説明します。
write.csv() と write.table() でデータフレームを書き出す
次の Base R の例では、2種類の形式で R の一時ディレクトリにファイルを書き出し、ファイルが存在することを確認します。記録された実行は正常に完了し、ファイルの存在確認はいずれも TRUE を返しました。
people <- data.frame(
Name = c("Alice", "Bob", "Charlie"),
Age = c(25, 30, 35),
City = c("New York", "Los Angeles", "Chicago")
)
csv_path <- file.path(tempdir(), "people.csv")
table_path <- file.path(tempdir(), "people-table.csv")
write.csv(people, file = csv_path, row.names = FALSE)
write.table(people, file = table_path, sep = ",", row.names = FALSE, col.names = TRUE)
file.exists(c(csv_path, table_path))
[1] TRUE TRUE
file.path(tempdir(), ...) を使うと保存先が明示され、現在の作業ディレクトリに依存しません。ファイルを恒久的に保存するには、一時パスを "people.csv" のようなファイル名に置き換えると作業ディレクトリに書き出せます。または、完全なパスを指定してください。Windows のパスでもスラッシュを使えます。たとえば "C:/Users/you/Documents/people.csv" のように指定できます。file.path() を使って、現在の OS に適したパスを組み立てることもできます。
write.csv() は、カンマ区切りデータ用に設定された write.table() の簡便な形式です。どちらの関数も既定では行名を含めます。row.names = FALSE を指定すると行名を省略し、row.names = TRUE を指定すると行名を先頭のフィールドとして書き出します。write.table() では sep で区切り文字を指定できます。カンマ区切りにするには sep = "," を使い、先頭行に列名を含める場合は col.names = TRUE のままにします。file.exists() は指定したパスごとに論理値を返すため、ファイルが作成されたかを確認できます。内容を確認するには、テキストエディターや表計算アプリでファイルを開いてください。
data.table::fwrite() でデータフレームを書き出す
data.table パッケージには、データフレームまたはデータテーブルを区切り文字付きファイルに書き出す fwrite() があります。install.packages("data.table") で一度インストールし、呼び出す前に library(data.table) で読み込みます。上記の people データフレームに対して data.table::fwrite(people, file.path(tempdir(), "people-fwrite.csv")) を実行すると、行名を含まないカンマ区切りファイルを書き出します。data.table::fwrite() のように名前空間を付けると、関数を提供するパッケージが明確になります。上の実行確認は Base R のみを対象としており、このパッケージの例は使い方を示すもので、ここでは実行していません。
readr::write_csv() でデータフレームを書き出す
別の選択肢として readr パッケージがあります。install.packages("readr") で一度インストールし、library(readr) で読み込むか、名前空間を付けて関数を呼び出します。同じデータに readr::write_csv(people, file.path(tempdir(), "people-readr.csv")) を使うと、行名を含めず、列名を含むカンマ区切り値を書き出します。CSV を書き出す関数なので、write.table() とは異なり、write_csv() には区切り文字を指定する引数がありません。上の実行確認は Base R のみを対象としており、この readr の例は使い方を示すもので、ここでは実行していません。