在数据库的 dplyr 过滤函数中传递 SQL 函数

2023-12-01

我在用着dplyr的自动SQL后端从数据库表中查询子表。例如。

my_tbl <- tbl(my_db, "my_table")

where my_table在数据库中看起来像

batch_name    value
batch_A_1     1
batch_A_2     2
batch_A_2     3
batch_B_1     8
batch_B_2     9
...

我只想要来自的数据batch_A_#,无论数量。

如果我用 SQL 写这个,我可以使用

select * where batch_name like 'batch_A_%'

如果我用 R 写这个,我可以使用几种方法来得到它:grepl(), %in%, or str_detect()

# option 1
subtable <- my_tbl %>% select(batch_name, value) %>%
    filter(grepl('batch_A_', batch_name, fixed = T))
# option 2
subtable <- my_tbl %>% select(batch_name, value) %>%
    filter(str_detect(batch_name, 'batch_A_'))

所有这些都会产生以下 Postgres 错误:HINT: No function matches the given name and argument types. You might need to add explicit type casts

那么,如何传入 SQL 字符串函数或匹配函数来帮助生成的 dplyr SQL 查询能够使用更灵活的函数范围filter?

(仅供参考%in%函数确实有效,但需要列出所有可能的值。这结合起来就可以了paste列出一个列表,但在更一般的正则表达式情况下不起作用)



A "dplyr-only”解决方案是这样的

tbl(my_con, "my_table") %>% 
  filter(batch_name %like% "batch_A_%") %>% 
  collect()

Full reprex:

suppressPackageStartupMessages({
  library(dplyr)
  library(dbplyr)
  library(RPostgreSQL)
})

my_con <- 
  dbConnect(
    PostgreSQL(),
    user     = "my_user",
    password = "my_password",
    host     = "my_host",
    dbname   = "my_db"
  )

my_table <- tribble(
  ~batch_name,    ~value,
  "batch_A_1",     1,
  "batch_A_2",     2,
  "batch_A_2",     3,
  "batch_B_1",     8,
  "batch_B_2",     9
)

copy_to(my_con, my_table)

tbl(my_con, "my_table") %>% 
  filter(batch_name %like% "batch_A_%") %>% 
  collect()
#> # A tibble: 3 x 2
#>   batch_name value
#> *      <chr> <dbl>
#> 1  batch_A_1     1
#> 2  batch_A_2     2
#> 3  batch_A_2     3

dbDisconnect(my_con)
#> [1] TRUE

这是有效的,因为 dplyr 不知道如何执行任何函数 翻译将按原样传递,请参阅?dbplyr::translate\_sql.

@PaulRougieux对于他最近的评论here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在数据库的 dplyr 过滤函数中传递 SQL 函数 的相关文章

  • R 中的 For 循环分配给数据框

    运行 for 循环后 我在分配给数据帧时遇到问题 当我使用 print 时 它给出了我的价值 有什么解释吗 salesdate lt rep seq from as Date 2013 12 19 to as Date 2013 12 23
  • 我应该如何优化 .net 代码中对一个简单存储过程的多次调用?

    我有一个非常简单的存储过程 create procedure spFoo v varchar 50 as insert into tbFoo select v 我有 50 个值要插入到 tbFoo 中 这意味着在我的 c 代码中我调用 sp
  • PostgreSQL - 返回多列的函数

    这是一个提供 2 列结果的函数 在这个函数中有一个Loop被用来返回结果 功能 Create Type Repeat rs as label text count bigint CREATE OR REPLACE FUNCTION Repe
  • 使用 dplyr 按组计算加权平均值(并复制其他方法)

    我对语法感到困惑dplyr当尝试计算加权平均值时 我听从大卫的建议here https stackoverflow com a 27609266 1457380 语法非常透明 因此很有吸引力 但它似乎没有按我的预期工作 低于加权平均值是针对
  • 使用存储过程访问数据可以提供哪些安全优势?

    我看到一些指南建议您通过存储过程对所有数据访问进行分层来保护数据库 我知道对于 SQL Server 您可以保护表甚至列免受 CRUD 操作的影响 例如 Logged in as sa USE AdventureWorks GRANT SE
  • Brew Postgresql 启动但进程未运行

    我在 Mac 上通过 Brew 安装了 Postgres 然后 我尝试启动它 gt brew services restart postgres Stopping postgresql might take a while gt Succe
  • 插值时间序列

    我有两组具有不同时间戳的数据 一组数据包含校准数据 另一组包含样本数据 校准的频率比样品少得多 我想做的是将校准数据 低频 插值到采样时间序列 高频 上 sam lt textConnection time value 01 00 52 2
  • 在 R 绘图上使用鼠标书写?

    我使用创建了散点图plot R 中的函数 有没有可能在这个图上画图 我想添加一条直线并获取它的参数 但在我看来abline 可能会很不方便 我想画很多条线 然后选择一条最合适的 我怎样才能完成这个任务 看看 RStudio 和这个例子 li
  • SQL限制数据库中的最小值和最大值

    CREATE TABLE TBL CD CDnr int identity 1 1 CDTitel nvarchar 80 NOT NULL CDduur int CDprijs smallmoney 所以我正在创建这个表 有什么方法可以将
  • 将英寸高度的字符向量转换为厘米?

    我得到一个字符向量 tibble H c 6 2 5 10 5 5 5 1 5 5 5 4 我想将其转换为厘米 请告知我该怎么做 有几种方法可以使用 1 阅读与fread粘贴到单个字符串后 library data table fread
  • 如何在 SQL 中编写 where 子句来按一天中的时间过滤 DATETIME 列?

    我有带有 DATETIME 列时间戳的数据 我想将其过滤到 DATETIME 介于上午 9 30 到下午 5 30 之间的任意一天的记录集 最好的方法是什么 更新 更改是因为我需要精确到分钟 而不仅仅是小时 对于那个很抱歉 您始终可以将其编
  • 如何将变量传递给 ddply 中的自定义函数?

    考虑以下数据 d data frame experiment as factor c foo foo foo bar bar si runif 5 ti runif 5 我想进行相关性测试si and ti 对于每个experiment因素
  • 在 R 中使用 ggplot2 叠加两个图

    有两个数据框 df1 df2我需要使用 ggplot2 创建线图并显示在同一个图表上 df1 x y 2 30 4 25 6 20 8 15 df2 x y 2 12 4 16 6 20 8 24 用于绘制第一个 df p1 lt ggpl
  • 对时间序列数据重新采样

    我有一个以毫秒为单位的时间序列列表 我想对时间序列进行重新采样并对组应用平均值 我如何在 Postgres 中实现它 重新采样 是指聚合一秒或一分钟内的所有时间戳 一秒或一分钟内的所有行形成一组 表结构 date x y z Use dat
  • 生成与现有变量具有预定义相关性的二进制变量

    对于模拟研究 我想生成一组随机变量 连续变量和二元变量 这些变量与已经存在的变量具有预定义的关联binary变量 此处表示为x 对于这篇文章 假设x是按照下面的代码生成的 但请记住 在现实生活中 x是一个已经存在的变量 set seed 1
  • 动态显示仪表板页面

    我有一个实用的闪亮应用程序 它使用shinydashboard包裹 新功能需要特定于用户的行为 例如 针对不同的用户名使用不同的数据集 因此我打算 显示登录表单 验证凭据并设置反应值LoggedIn to true如果成功的话 显示实际情况
  • 如何解决 R 估计中的整数溢出错误

    我正在尝试使用估计模型speedglm在 R 中 数据集很大 约 6988 万行和 38 列 行数和列数相乘得到约 27 亿 超出了整数限制 我无法提供数据 但以下示例重现了该问题 library speedglm large exampl
  • 使用 ggplot2 在一张画布上绘制多个图形[重复]

    这个问题在这里已经有答案了 我正在尝试根据此表将两个 ggplot2 图合并为一个图 Type RatingA RatingB 1 One 3 36 2 Two 5 53 3 One 5 57 4 One 7 74 5 Three 4 38
  • Postgresql 创建扩展失败

    我正在使用扩展 到目前为止没有任何问题 现在我创建一个新的 当我打电话时 创建扩展实用程序 我进入 PG 9 2 创建扩展实用程序 FEHLER Syntaxfehler bei ZEILE 1 创建扩展实用程序 在 PG 9 1 中 创建
  • 使用 GROUP 和 SUM 的 LINQ 查询

    请帮助我了解如何使用带有 GROUP 和 SUM 的 LINQ 进行查询 Query the database IEnumerable

随机推荐

  • AttributeError:模块“pyparsing”没有属性“downcaseTokens”rasa

    我在使用 rasa 时遇到问题 因为出现以下错误 我无法跑步或训练或做任何事情 回溯 最近一次调用最后一次 文件 c users dell anaconda3 envs rasanew lib runpy py 第 193 行 位于 run
  • 将子控制器添加到表视图单元格时不会调用 viewWillAppear

    当我将子视图控制器添加到表视图单元格时 它看起来像视图将出现对于子视图控制器不被调用 仅查看是否出现 表视图控制器方法 override func tableView tableView UITableView cellForRowAtIn
  • 删除具有相似前缀的重复行

    我需要删除文件中具有重复前缀的类似行并保留唯一的行 由此 abc def ghi abc def ghi jkl one abc def ghi jkl two 123 456 123 456 789 xyz to this abc def
  • 执行动态加载的JS文件

    我理解JS是单线程 同步执行的 因此 当我将文件添加到浏览器头标记时 该文件一遇到就会执行 然后它转到下一个脚本标记并执行该文件 我的问题是当我将 js 文件动态添加到 HTML head 标记时 浏览器如何执行该文件 是不是像当前执行的地
  • 如何用CSS将矩形图像“裁剪”成正方形?

    我知道用 CSS 实际修改图像是不可能的 这就是为什么我将裁剪放在引号中 我想做的是拍摄矩形图像并使用 CSS 使它们显示为正方形而不扭曲图像 我基本上想把这个 进入这个 没有包装器的纯 CSS 解决方案div或其他无用的代码 img ob
  • 在启动时设置默认的 matlab 路径

    我的团队正在尝试标准化我们的 Matlab 路径 以便每个人都有相同的路径 我有一个我们都应该拥有的默认 matlab 路径列表 因此 我们希望有一个在 matlab 打开时运行的脚本 以确保我们的路径设置为默认的 matlab 路径 因此
  • 如何使用 PHP 从 HTML 代码中删除多余的
    标签?

    我正在用 PHP 解析一些凌乱的 HTML 代码 其中有一些冗余标签 我想清理一下它们 例如 br br br br 我如何使用 preg replace 替换类似的东西 br br 换行符 空格以及它们之间的差异 br br and br
  • 无法施展通用套装?

    我今天遇到一个有趣的问题 考虑下面的代码 public static class Parent public static class Child extends Parent Set
  • 如何用 R 中的特定值替换 NA 值?

    我有一个时间序列数据框 但该数据包含 NA 如下所示 KQ11 Open KQ11 High KQ11 Low KQ11 Close KQ11 Volume KQ11 Adjusted 2017 04 05 627 89 630 17 62
  • 使用 AngularFire 中的记录进行基本用户身份验证

    在花了几天时间尝试不同的 各种推荐的方法来做到这一点之后 我找到了我认为最简单和最有希望的方法 也感谢这个问题的好心人 获取 Firebase AngularFire 中项目的索引 ID 当前设置 用户可以使用电子邮件和社交网络登录 因此当
  • turtle.done() 在 Spyder 中不起作用

    这个简单的 Python 脚本 import turtle bob turtle Turtle bob forward 50 turtle done 使用 Spyder 运行时会出现错误 第一次运行按预期工作 但之后 IPython 控制台
  • BadFilterError:过滤器无效:每个查询只能有一个属性具有不等式过滤器(<=、>=、<、>)

    我正在尝试对两个不同的属性应用过滤器 但 GAE 不允许我这样做 那么解决方案是什么 这是代码片段 if searchParentX que filter parentX gt searchParentX filter parentX lt
  • TWIG - 在不同模板中包含变量

    我想在不同的模板中包含相同的变量 vars catchphrase twig set catchphrase size if var tile catchphrase length lt 4 set catchphrase size siz
  • 各种符号(*、&等)与参数组合有什么区别? [复制]

    这个问题在这里已经有答案了 可能的重复 我知道这对你们许多人来说可能是一个非常基本的问题 但尽管我尽了最大的努力 但我确实很难找到一个好的 彻底的解释 我确信答案就在那里 所以我的搜索词一定很糟糕 在 C 中 使用各种符号及其组合来标记参数
  • 如何使用电影动画正确引用无花果和斧头

    data dict x 0 0 3760 448435678077 0 12 4851 68102541007 0 2226 5297 61518907981 0 2479 4812 134249142693 0 2724 4756 529
  • 可访问性在模拟器上有效,但在设备上无效

    在我的项目中 我使用 Apple 提供的 Reachability 类 当没有互联网连接时 我会显示一条警报消息 当我在模拟器上测试它时 一切工作正常 但是当我在 iPad 上运行它时 在没有互联网的情况下不会显示警报消息 我在 iOS 5
  • 如何将向量写入FileStorage

    我已经能够使用 FileStorage 成功地将关键点 向量 描述符 Mat 和其他内容写入 yml 文件 但是 在计算一对图像之间的匹配后 我无法将匹配写入文件 我假设这是因为 DMatch 似乎是一个具有距离 trainIdx 等字段的
  • 如何从元素中删除所有属性

    如何删除整个文档中特定元素的所有属性 我正在尝试这样的事情 from bs4 import UnicodeDammit from lxml import html content open source html read document
  • iOS:将图像幻灯片的 setImageInputs 设置为图像数组

    我正在使用来自的图像幻灯片here iconArr UIImage named home min UIImage named category min UIImage named settings min UIImage named con
  • 在数据库的 dplyr 过滤函数中传递 SQL 函数

    我在用着dplyr的自动SQL后端从数据库表中查询子表 例如 my tbl lt tbl my db my table where my table在数据库中看起来像 batch name value batch A 1 1 batch A