Sam*_*kel 5 sql r dplyr dbplyr
这是我通过 dbplyr 运行一些 SQL 查询的方法
library(tidyverse)
library(dbplyr)
library(DBI)
library(RPostgres)
library(bit64)
library(tidyr)
drv <- dbDriver('Postgres')
con <- dbConnect(drv,dbname='mydb',port=5432,user='postgres')
table1 <- tbl(con,'table1')
table2 <- tbl(con,'table2')
table3 <- tbl(con,'table3')
table1 %>% mutate(year=as.integer64(year)) %>% left_join(table2,by=c('id'='id')) %>%
left_join(table3,by=c('year'='year'))
Run Code Online (Sandbox Code Playgroud)
我想删除一些包含 NA 的行,然后删除collect我的最终表,但找不到任何对 dbplyr 查询有用的内容。
我尝试drop_na()从管道tidyr和其他一些基本功能(complete.cases()等)。你能给我什么建议来实现我的目标吗?WHERE FOO IS NOT NULL也欢迎通过管道将 SQL 查询(如 )传递给 dbplyr 查询。
提前致谢。
好吧,实际上我仍然没有得到令人满意的解决方案。我真正想做的是在 R 环境中删除包含 NA 行而不键入 SQL 查询,我认为dbplyr尚不支持此功能。
然后我写了一些简单的代码来实现我的愿望;
main_query<-table1 %>% mutate(year=as.integer64(year)) %>% left_join(table2,by=c('id'='id')) %>%
left_join(table3,by=c('year'='year'))
colnames <- main_query %>% colnames
query1 <- main_query %>% sql_render %>% paste('WHERE')
query2<-''
for(i in colnames){
if(i == tail(colnames,1)){query2<-paste(query2,i,'IS NOT NULL')}
else{query2<-paste(query2,i,'IS NOT NULL AND')}
}
desiredTable <- dbGetQuery(con,paste(query1,query2))
Run Code Online (Sandbox Code Playgroud)
是的,我知道这看起来并不神奇,但也许有人可以利用它。
| 归档时间: |
|
| 查看次数: |
651 次 |
| 最近记录: |