有没有办法在不从数据库中收集数据帧的情况下使用dplyr :: bind_rows?

时间:2016-09-26 18:05:27

标签: mysql r 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)
  

错误:不兼容的尺寸(1!= 8)

有什么建议吗?在这个玩具示例中,用SQL编写整个查询不会有问题,但当然,在现实生活中,foo和bar通常要复杂得多。

1 个答案:

答案 0 :(得分:2)

使用dplyr::union()将执行SQL union()操作,但重要的是要注意dplyr::union()将删除重复的行(如SQL版本)。使用dplyr::union_all()会保留重复的行,例如bind_rows()

不幸的是,没有办法获得bind_rows()的好处,特别是非常有用的.id参数。