【问题标题】:filter dplyr sqlite3 connection using regex使用正则表达式过滤 dplyr sqlite3 连接
【发布时间】:2015-11-23 18:43:30
【问题描述】:

我想使用正则表达式通过 dplyr 从 sqlite3 连接中选择行,不幸的是这似乎不可能。是否可以根据正则表达式过滤这些行?下面的代码显示了错误。

library(nycflights13)
my_db <- src_sqlite("my_db.sqlite3", create = T)
flights_sqlite <- copy_to(my_db, flights, temporary = FALSE, indexes = list(c("year", "month", "day"), "carrier", "tailnum"))
flights_sqlite <- tbl(nycflights13_sqlite(), "flights")
filter(flights_sqlite, grepl("N9.*", tailnum))

#> Error in sqliteSendQuery(con, statement, bind.data) :
#> error in statement: no such function: GREPL

【问题讨论】:

    标签: regex r sqlite dplyr


    【解决方案1】:

    不幸的是,dplyr 无法将许多有用的函数转换为它传递给 sqlite 的 sql 查询。你可以在dplyr database vignette看到它的功能列表:

    dplyr 知道如何将以下 R 函数转换为 SQL:

    • 基本数学运算符:+、-、*、/、%%、^
    • 数学函数:abs, acos, acosh, asin, asinh, atan, atan2, atanh, ceiling, cos, cosh, cot, coth, exp, floor, log, log10, 圆形, 符号, sin, sinh, sqrt, tan, tanh
    • 逻辑比较:=、>、==、%in%
    • 布尔运算:&、&&、|、||、!、异或
    • 基本聚合:mean、sum、min、max、sd、var

    但是,dplyr 将不理会它无法翻译的任何内容并将其传递给 sqlite。这就是您的错误的来源 - dplyr 无法翻译 grepl,因此将其传递给引发错误的 sqlite。

    如果你懂一点 sql,你可以编写自己的等效查询,使用%like%

    filter(flights_sqlite, tailnum %like% "N9%")
    
    Source: sqlite 3.8.6 
    From: flights [30,216 x 16]
    Filter: tailnum %like% "N9%" 
    
        year month   day dep_time dep_delay arr_time arr_delay carrier tailnum flight origin  dest air_time
       (int) (int) (int)    (int)     (dbl)    (int)     (dbl)   (chr)   (chr)  (int)  (chr) (chr)    (dbl)
    1   2013     1     1      602        -8      812        -8      DL  N971DL   1919    LGA   MSP      170
    2   2013     1     1      608         8      807        32      MQ  N9EAMQ   3768    EWR   ORD      139
    3   2013     1     1      655        -5     1002       -18      DL  N997DL   2003    LGA   MIA      161
    4   2013     1     1      659        -6      907        -6      DL  N998DL    831    LGA   DTW      105
    5   2013     1     1      717        -3      850        10      FL  N978AT    850    LGA   MKE      134
    6   2013     1     1      754        -5     1039        -2      DL  N935DL   2047    LGA   ATL      126
    7   2013     1     1      759        -1     1057       -30      DL  N955DL   1843    JFK   MIA      158
    8   2013     1     1      804        -6     1103       -13      DL  N947DL   1959    JFK   MCO      147
    9   2013     1     1      810         0     1048        11      9E  N915XJ   3538    JFK   MSP      189
    10  2013     1     1      814         4     1047        17      FL  N977AT    346    LGA   ATL      132
    ..   ...   ...   ...      ...       ...      ...       ...     ...     ...    ...    ...   ...      ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-18
      • 1970-01-01
      相关资源
      最近更新 更多