R sqldf/data.table/dplyrでCSVファイルを選択する方法は?

R sqldf/data.table/dplyrでCSVファイルを選択する方法は?

私は手がかりを知っていますRで2つのcsvファイルを内部的にリンクする方法マージオプションがありますが、望ましくありません。 2つのCSVデータファイルがあります。 SQL、Rなどのクエリをどのように処理するかを心配しています。主キーは2つのCSVファイルですdata_id。見つからないIDは(etc.)data.csvにあります。log.csv4

data_id, event_value
1, 777
1, 666
2, 111
4, 123 
3, 324
1, 245

log.csv熱に重複がないがID重複がある場合name

data_id, name
1, leo
2, leopold
3, lorem

PostgreSQL構文の一部の類似コード

  1. 許すdata_id=1
  2. nameとは別に合計を表示します。event_valuedata.csvlog.csv

PostgreSQL部分選択に似た類似コード

SELECT name, event_value 
    FROM data, log
    WHERE data_id=1;

期待される出力

leo, 777
leo, 666 
leo, 245

Rメソッド

file1 <- read.table("file1.csv", col.names=c("data_id", "event_value"))
file2 <- read.table("file2.csv", col.names=c("data_id", "name"))

# TODO here something like the SQL query 
# http://stackoverflow.com/a/1307824/54964

sqldfここで十分だろうと考えられる可能な方法

  1. sqldf
  2. data.table
  3. dplyr

CSVファイルで実行したいことを示すPostgreSQLスキーマのようなコード

CREATE TABLE data (
        data_id SERIAL PRIMARY KEY NOT NULL,
        event_value INTEGER NOT NULL
);
CREATE TABLE log (
        data_id SERIAL PRIMARY KEY NOT NULL,
        name INTEGER NOT NULL
);

R:3.3.3
OS:Debian 8.7
関連:関連スレッドのPostgreSQLメソッドPostgreSQLで2つのCSVファイル/...を使用してSELECTを実行するには?

ベストアンサー1

RにはSQLレベルの利便性を備えた多くのパッケージがあります。最も便利なパッケージは

  • dplyr(現代的で基本的な機能よりも10〜100倍速い場合が多い)には、グループ別や個々の結合などのSQLに触発されたコマンドがあります。

  • SparkR(Sparkサポートが必要な場合はここにはありませんが、優れたSQL便利なコマンドが付属しています)や、グループ別や個別の結合などのSQLに触発されたコマンド

  • data-tableread.csvに置き換えるなど、基本機能よりも効率的な機能を提供しますfread

  • SQLDFは非常に信頼できず、非効率的であり、上記の失敗したRstudioのような優先順位エラーは致命的なエラーを引き起こす可能性があります。

これらのパッケージは、SQLを学習してデバッグする方法を教えてくれません。 SQLDFは確かに適切なSQLを学習するのに最も便利なツールではありません。 SQL Server Management Studio(Windows)は使いやすくなります(たとえば、Azure Basic SQL DB、月5€、または無料評価)。ここまたは他のデータベース - または直接設定

  • コマンドソース pos​​tgres データベースを使用したsrc_postgres()R のデータベースコマンドの詳細ここ

以下に、正しいSQLを示し、コード例で発生したエラーを修正するデモを示します。また、SQLの便利なコマンドも示しています。 Rパッケージで何を見つけるべきかを知るために、まずSQLを正しく学ぶのが最善です。

デモ


コード4は無効な優先順位のため失敗します。 where句とUSINGは結合の後に来なければなりません。

> file1 <- read.csv("test1.csv", header=TRUE, sep=",")
> file2 <- read.csv("test2.csv", header=TRUE, sep=",")

> sqldf("SELECT event_value, name
+       FROM file1
+       LEFT JOIN 
+       (SELECT data_id, name
+       FROM file2
+       WHERE data_id = 1)
+       USING(data_id)
+       WHERE data_id = 1")
  event_value name
1         777  leo
2         666  leo
3         245  leo

他の方法は次のとおりです。

正しいLEFT-JOINメソッド

> df3 <- sqldf("SELECT event_value, name
+              FROM file1 a
+              LEFT JOIN file2 b ON a.data_id=b.data_id")
> 
> df3
  event_value    name
1         777     leo
2         666     leo
3         111 leopold
4         123    <NA>
5         324   lorem
6         245     leo
> df3 <- sqldf("SELECT a.event_value, b.name
+    FROM file1 a
+              LEFT JOIN file2 b ON a.data_id=b.data_id
+              WHERE a.data_id = 1")
> df3
  event_value name
1         777  leo
2         666  leo
3         245  leo

Where条件を使用したテーブルのマージ

> df4 <- sqldf("SELECT a.event_value, b.name
+    FROM file1 a, file2 b
+              WHERE a.data_id = 1
+              AND a.data_id=b.data_id")
> 
> df4
  event_value name
1         777  leo
2         666  leo
3         245  leo

SQLサブクエリ方法

> df5 <- sqldf("SELECT a.event_value, b.name
+    FROM 
+              (SELECT data_id, event_value FROM file1) a,
+              (SELECT data_id, name FROM file2) b
+              WHERE a.data_id = 1
+              AND a.data_id=b.data_id")
> df5
  a.event_value b.name
1           777    leo
2           666    leo
3           245    leo

RでSQLを使用する便利な方法は何ですか?


dplyr

  • SQLスタイルの結合

    ここに画像の説明を入力してください。

  • build_sql SQLスタイルコマンドを実行するための便利な関数

    ここに画像の説明を入力してください。

  • Case-When関数はSQL-CASE-WHENからインスピレーションを得ました。

  • SQL-COALESCEからインスピレーションを得たマージ機能
  • translate_sqlはR関数をSQLに変換するのに役立ちます(詳細はここ)

    # Many functions have slightly different names
    translate_sql(x == 1 && (y < 2 || z > 3))
    #> <SQL> "x" = 1.0 AND ("y" < 2.0 OR "z" > 3.0)
    translate_sql(x ^ 2 < 10)
    #> <SQL> POWER("x", 2.0) < 10.0
    translate_sql(x %% 2 == 10)
    #> <SQL> "x" % 2.0 = 10.0
    
  • SQLLiteとdplyr:sqliteパッケージをインストールし、dplyrを使用してNYCデータセットを試してください。ここ

SparkRパッケージ

  • SQLスタイルの結合(内部結合、左結合など)とグループ化基準。もっとここ

    ここに画像の説明を入力してください。

おすすめ記事