使用 dbplyr 删除包含 NA 的行

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 查询。

提前致谢。

Sam*_*kel 0

好吧,实际上我仍然没有得到令人满意的解决方案。我真正想做的是在 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)

是的,我知道这看起来并不神奇,但也许有人可以利用它。