2016-09-26 20 views
3

bind_rows()をデータフレームのセットに使用する方法は、最初にデータベースから収集する必要はありませんか?データベースからデータフレームを収集せずにdplyr :: bind_rowsを使用する方法はありますか?

は、私は、クエリテーブルdplyrカップルを定義したと言う:

mydatabase <- src_mysql('database') 
table1 <- tbl(mydatabase,"table1") 
table2 <- tbl(mydatabase,"table3") 

foo <- table1 %>% filter(id > 10) %>% select(id) 
bar <- table2 %>% select(id) 

私がfooに参加し、一緒にバーできるようにしたいと思います - 本質的に、私は上の組合を実行したいのですが2つのサブクエリをSQLにドロップする必要はありません。私がいることをしようとすると、私はその本当のデータフレームむしろ、2つのtbl_sqlオブジェクトに参加しようとしているのでしかし、私はエラーを取得する:

unioned_data_frame <- bind_rows(foo,bar) 

Error: incompatible sizes (1 != 8)

任意の提案ですか?このおもちゃの例では、問合せ全体をSQLで記述することは問題にはなりませんが、実際のところ、fooとbarはしばしばかなり複雑になります。

+1

SQLクエリに関して重い荷を扱う 'dplyr :: union()'を使うことができましたが、 'bind_rows()'には非常に便利な.id引数はありません。 おそらく私はなしで行かなければならないでしょうか? – crazybilly

+2

'dplyr :: union_all()'が 'bind_rows()'を完全に複製したいと思っていますが、おそらく 'mutate()'を使って識別子を持つ列を追加する必要があります。残念です。 – HoHo

答えて

1

dplyr::union()を使用すると、dplyr::union()は重複する行(SQL版など)を削除することに注意することは重要ですが、SQLのアクションを実行します。 dplyr::union_all()を使用すると、重複する行がbind_rows()のようになります。

残念ながら、bind_rows()の利点、特に非常に有用な.id引数を得る方法はありません。

関連する問題