2016-09-26 74 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和bar在一起 - 在本質上,我想在執行工會兩個子查詢,而不必刪除到SQL。然而,當我嘗試,我得到一個錯誤,因爲我試圖連接兩個tbl_sql對象,而真正的數據幀:

unioned_data_frame <- bind_rows(foo,bar) 

Error: incompatible sizes (1 != 8)

有什麼建議?在這個玩具的例子中,用SQL編寫整個查詢不會是一個問題,但當然,在現實生活中,foo和bar通常要複雜得多。

+1

我可以使用'dplyr :: union()'來處理SQL查詢方面的繁重工作,但它沒有'bind_rows()'所具有的非常方便的.id參數。 也許我必須沒有? – crazybilly

+2

我想你想'dplyr :: union_all()'爲了完美地複製'bind_rows()',但是,你可能不得不使用'mutate()'創建一個標識符的附加列,它是不幸的。 – HoHo

回答

1

使用dplyr::union()將執行SQL union()操作,但需要注意的是dplyr::union()將刪除重複的行(如SQL版本)。使用dplyr::union_all()會保留重複的行,如bind_rows()

不幸的是,沒有辦法獲得bind_rows()的好處,特別是非常有用的.id的論點。

相關問題