2016-09-26 77 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的论点。

相关问题