如何按包含 dbplyr 中的变量的字符串进行过滤

Ale*_*lex 7 r dplyr dbplyr

我通常在 dplyr 中使用filterwith grepl,但在使用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))
Run Code Online (Sandbox Code Playgroud)

小智 5

我从这个答案中找到了有效的解决方案。

这是适用于您的案例的代码:

dplyr::tbl(con, "flights") %>% 
    filter(origin %like% '%jf%') %>%
    collect()
Run Code Online (Sandbox Code Playgroud)


小智 1

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

例如..

mtcars %>% mutate_at(vars(matches("cyl")), funs("123" = .+1))
Run Code Online (Sandbox Code Playgroud)