Как перевести внутреннее соединение SQL с предложением like в рабочий процесс dplyr?

0

У меня три таблицы базы данных mySQL 1-3. Моя цель - выполнить некоторые левые и внутренние операции объединения в этих таблицах с помощью R dplyr. Я пытаюсь перевести исходный код SQL в рабочий процесс dplyr с помощью dbplyr в R. Часть моего исходного SQL-запроса выглядит так:

INNER JOIN table3 ON tabl1.well = table3.well AND table2.plex LIKE table3.set

Пока что мой R-код выглядит так:

library(RMySQL)
library(dbplyr)
library(dplyr)

t1 <- tbl(con,'table1')
t2 <- tbl(con,'table2')
t3 <- tbl(con,'table3')
st <- select(t2,set) %>% filter(!duplicated(set))

t1 %>% left_join(t2,.,by=c('d_id'='p_id') %>%
    inner_join(t3,by='well') %>%
    filter(plex %in% st) %>%      # this part is wrong!!
    collect()

Когда выполняется вышеуказанный R-код, результаты отличаются от SQL-запроса. Я хотел бы знать, каков правильный способ перевести внутреннюю часть соединения SQL-запроса в синтаксис dplyr в R. Простой inner_join на двух столбцах довольно прост в использовании с dplyr. Но мне сложно перевести часть с предложениями AND и LIKE в dplyr lingo. К сожалению, для этого примера у меня нет реплицируемых данных.

  • 0
    Ваш filter - правильная идея, но %in% - неправильная функция. Обычно SQL like использует подстановочные знаки % и _ для определенного поведения. Если они включены в ваши данные, им потребуется некоторая работа для перевода. Я не знаю, как исправить ваш код без каких-либо примеров данных. Может быть, вы можете сделать несколько поддельных строк, чтобы поделиться? Это не обязательно должны быть реальные данные, но несколько строк ввода и желаемого результата сделают этот вопрос ответным.
Теги:
dplyr
tidyverse
dbplyr

1 ответ

1

dbplyr сохранит функции infix как они есть. Другими словами, вы можете использовать оператор %like% как эквивалент SQL LIKE. Затем вы можете использовать те же символы с дикими картами, что и должно выглядеть так: filter(name %like% "%text%")

Ещё вопросы

Сообщество Overcoder
Наверх
Меню