有没有办法在一组数据框架上使用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通常要复杂得多。
答案 0 :(得分:2)
使用dplyr::union()
将执行SQL union()
操作,但重要的是要注意dplyr::union()
将删除重复的行(如SQL版本)。使用dplyr::union_all()
会保留重复的行,例如bind_rows()
。
不幸的是,没有办法获得bind_rows()
的好处,特别是非常有用的.id
参数。