前回は R に取り込んだデータフレームを SQL で取り扱う sqldf ( RデータフレームからSQLでデータを取得するsqldfライブラリ - 一所懸命に手抜きする )というパッケージの中の sqldf() 関数を紹介しました。今回は sqldf パッケージの中の read.csv.sql() 関数についてです。
read.csv.sql | RDocumentationを参照。
sqldfライブラリの read.csv.sql() 関数はSQLでCSVを読み込める
RではCSVからデータを取り込むことが多いですが、何万レコードものデータを全件取り込んでから処理するのではなく、最初からSQLで条件抽出したいことがあります。
sqldfライブラリには read.csv.sql() があり、これによりSQLを用いてCSVを読み込めます。Rのデータフレームにする前にデータを間引いていますので普通に全レコードを読む場合よりはたくさんのレコードを読めるようです。SQliteには取り込んでいるのですから、無制限ではありませんが。
CSV サンプル Rtest.csv(「支店名簿」CSV)作成Rコード
CSV サンプル Rtest.csv | |||
---|---|---|---|
支社番号 | 支社名 | 支店番号 | 支店名 |
10 | 札幌 | 11 | 札幌 |
20 | 東京 | 21 | 大手町 |
20 | 東京 | 22 | 秋葉原 |
20 | 東京 | 23 | 横浜 |
read.csv.sql()使用法
library(sqldf) # 最低限の指定 read.csv.sql(" File Name ",sql =" SQL statement ") # オプション read.csv.sql(" File Name ",sql =" SQL statement ", header = TRUE, sep = ",",row.names, eol, skip, filter, nrows, field.types, colClasses, dbname = tempfile(), drv = "SQLite", ...)
CSVからSQL(select)
実際の使い方は・・・、
library(sqldf) read.csv.sql("C:/Wrk/Rtest.csv",sql ="select * from file where 支社番号=20") ## 支社番号 支社名 支店番号 支店名 ##1 20 東京 21 大手町 ##2 20 東京 22 秋葉原 ##3 20 東京 23 横浜
select 文において必ず from file とすることがポイントです。
CSVからSQL(select以外)
sqldfはSQLiteを呼び出しているわけですから、select以外のコマンドも使えるものがあります。
library(sqldf) read.csv.sql("C:/Wrk/Rtest.csv",sql ="PRAGMA TABLE_INFO(file)") ## cid name type notnull dflt_value pk ##1 0 支社番号 INTEGER 0 <NA> 0 ##2 1 支社名 TEXT 0 <NA> 0 ##3 2 支店番号 INTEGER 0 <NA> 0 ##4 3 支店名 TEXT 0 <NA> 0