У меня три таблицы базы данных 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. К сожалению, для этого примера у меня нет реплицируемых данных.
dbplyr
сохранит функции infix как они есть. Другими словами, вы можете использовать оператор %like%
как эквивалент SQL LIKE. Затем вы можете использовать те же символы с дикими картами, что и должно выглядеть так: filter(name %like% "%text%")
filter
- правильная идея, но%in%
- неправильная функция. Обычно SQL like использует подстановочные знаки%
и_
для определенного поведения. Если они включены в ваши данные, им потребуется некоторая работа для перевода. Я не знаю, как исправить ваш код без каких-либо примеров данных. Может быть, вы можете сделать несколько поддельных строк, чтобы поделиться? Это не обязательно должны быть реальные данные, но несколько строк ввода и желаемого результата сделают этот вопрос ответным.