【问题标题】:matching underscore character in sqldf rsqldf r中的匹配下划线字符
【发布时间】:2015-10-06 14:18:54
【问题描述】:

我有一个数据框 df,

df = data.frame(name=c("jean", "lucie", "marie", "alain", "dupont", "stephane"),
  address=c("A3_Lyon" ,"paris_A1", "Paris_A2_Test", "Par1", "Paris_A2de2_Lyon",   'Lille_Aide_'))

我想选择包含A2的地址,我该如何使用sqldf呢?这个指令给了我错误的结果:

sqldf("select * from df where address like '%_A2_%'")
##     name          address
## 1  marie    Paris_A2_Test
## 2 dupont Paris_A2de2_Lyon

对我来说正确答案是:

##     name          address
## 1  marie    Paris_A2_Test

我该怎么做

【问题讨论】:

  • 你不能只做df[grepl("_A2_", df$address), ]吗?或者如果你喜欢“like”语法,也许library(data.table) ; setDT(df)[address %like% "_A2_"]

标签: r sqldf


【解决方案1】:

对于大多数 SQL 方言,_ 匹配 LIKE 语句中的任何给定单个字符。使用 sqldf (SQLite) 的默认 SQL 驱动程序,您可以将 like 语句替换为 glob,它使用 * 和 ?而不是 % 和 _ 分别或尝试指定转义:

 sqldf("select * from df where address glob '*_A2_*'")

 sqldf("select * from df where address like '%\\_A2\\_%' ESCAPE '\\'")

【讨论】:

    猜你喜欢
    • 2012-01-04
    • 1970-01-01
    • 2021-09-26
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 2021-04-15
    相关资源
    最近更新 更多