【发布时间】:2021-03-17 16:48:08
【问题描述】:
我想只过滤包含两个唯一字符串中的一个或多个的样本。基本上,我只想保留在同一个样本中至少有一个 al 和一个 ph 代码的样本。
我正在尝试将此 dplyr 分组过滤器复制到 dbplyr 中,但没有成功。
这是我尝试复制的成功 dplyr 代码:
library(DBI)
library(odbc)
library(dbplyr)
library(tidyverse)
al_codes <- c('al1', 'al2', 'al3', 'al4')
ph_codes <- c('ph1', 'ph2', 'ph3', 'ph4')
df <-
tibble(
sample = c(rep('water',4), rep('surfacewater',4), rep('groundwater',4)),
variable = c('al1', 'al2', 'al3', 'ph1', 'al1', 'al2', 'al3', 'al4', 'ph1', 'ph2', 'ph3', 'ph4')
)
# want to pull only records that have at least one al and one ph test code in same sample
df %>%
group_by(sample) %>%
filter(any(al_codes %in% variable) & any(ph_codes %in% variable))
# A tibble: 4 x 2
# Groups: sample [1]
# sample variable
# <chr> <chr>
# 1 water al1
# 2 water al2
# 3 water al3
# 4 water ph1
这只会正确过滤“水”样本,因为它有 >=1 的 al_codes 和 ph_codes。
但是,当我尝试在 dbplyr 查询中将其复制到 oracle 数据库时,我收到以下错误:
tbl(con, from =in_schema('DWH_DBA','DWH_ALL_SAMPLE_RESULTS')) %>%
group_by(SAMPLE_ID) %>%
filter(any(al_test_codes %in% TEST_CODE) & any(ph_test_codes %in% TEST_CODE))
Error: nanodbc/nanodbc.cpp:1617: HY000: [Oracle][ODBC][Ora]ORA-00936: missing expression
...
非常感谢任何有关如何在 dbplyr 中完成此任务的建议。
会话信息:
R 版本 3.6.3 (2020-02-29)
DBI_1.1.0; odbc_1.2.2; dbplyr_1.4.2; tidyverse_1.3.0
【问题讨论】: