如何使用dbplyr中包含变量的字符串进行筛选

时间:2017-09-07 12:55:14

标签: r dplyr dbplyr

我通常在dplyr中使用filtergrepl,但在使用dbplyr时。我得到一个错误,grepl不是一个公认的功能。我的猜测是它无法转换为SQL服务器。使用dbplyr

可以解决这个问题

这是一个可重现的例子

library(dbplyr)
library(nycflights13)

## Working chunk
con <-DBI::dbConnect(RSQLite::SQLite(), ":memory:")
DBI::dbWriteTable(con, "flights", flights)
DBI::dbGetQuery(con, "SELECT origin, flight 
FROM flights WHERE origin like '%jf%'")
## End working chunk

## The below code does not work 
flights <- tbl(con,"flights")
flights %>% 
  select(origin, flight) %>% 
  filter(grepl('jf', origin))

3 个答案:

答案 0 :(得分:1)

我不确定你问的是什么,但是你尝试过任何at功能吗?

例如..

mtcars %>% mutate_at(vars(matches("cyl")), funs("123" = .+1))

答案 1 :(得分:1)

我发现this answer的解决方案有效。

以下是适合您案例的代码:

dplyr::tbl(con, "flights") %>% 
    filter(origin %like% '%jf%') %>%
    collect()

答案 2 :(得分:0)

我经常将grepl与管道配合使用以匹配多个值。对于postgresql,如果要匹配多个值,similar to也可以:

dplyr::tbl(con, "flights") %>% 
    filter(origin %similar to% '(JF|LG)%') %>%
    collect()