Size: a a a

R (язык программирования)

2021 March 02

М

Марк in R (язык программирования)
Байкулов Антон
А можно пример записи в R c IN в query запросе? Как правильно вставить вектор, чтобы значения через , шли.
Вот так мне выдавал ошибку:
clients <- tbl(bd, "clients") %>%
 filter (client_id %in% from_1C$customer_id) %>%
 select(2, 8, 9, 10) %>% collect()

А вот так все выгрузил:
vector <- from_1C$customer_id
clients <- tbl(bd, "clients") %>%
 filter (client_id %in% vector) %>%
 select(2, 8, 9, 10) %>% collect()
источник

БА

Байкулов Антон... in R (язык программирования)
Блин, я через SQL и DBI делаю.

Мой пример paste0( "SELECT * FROM t WHERE landingPage in (", vector, ")"  ) - не работает
источник

YS

Yuriy Saraikin in R (язык программирования)
Evgeniy Dolgin
что-то сходу не смог сообразить, может кто подскажет, можно ли из матрицы сделать выборку по двумерному массиву индексов без цикла?

m <- matrix(1:9, ncol = 3)
v <- matrix(c(1,2,1,3), ncol = 2)
magic_subset(m, v) # 1 8
как-то так получилось
m <- matrix(1:9, ncol = 3)
v <- matrix(c(1,2,1,3), ncol = 2)
v1 <- v[, 1] * v[, 2]
map_dbl(v1, ~pluck(t(m), .x))

или
sapply(v1, FUN = function(x) t(m)[x])
источник

М

Марк in R (язык программирования)
Байкулов Антон
Блин, я через SQL и DBI делаю.

Мой пример paste0( "SELECT * FROM t WHERE landingPage in (", vector, ")"  ) - не работает
аа, ну так я не разобрал еще. Филипп дал выше с glue способ
источник

БА

Байкулов Антон... in R (язык программирования)
Марк
Вот так мне выдавал ошибку:
clients <- tbl(bd, "clients") %>%
 filter (client_id %in% from_1C$customer_id) %>%
 select(2, 8, 9, 10) %>% collect()

А вот так все выгрузил:
vector <- from_1C$customer_id
clients <- tbl(bd, "clients") %>%
 filter (client_id %in% vector) %>%
 select(2, 8, 9, 10) %>% collect()
А по логам видно как шёл SQL? Это был один запрос или кучка?
источник

М

Марк in R (язык программирования)
Philipp Upravitelev
сформируйте простую строку с запросом с помощью glue
и в него положите сконкатенированный в строку вектор идентификаторов
типа такого glue('select * from x where y in ({ids})')
а ids строка вида '123, 456, 789'
вообще, если в in указывать сотни тысяч значений, это не очень хорошо для sql, проще приджойнить
Вот этот. Но я сегодня уже не опробую, спать уже скоро надо))
источник

БА

Байкулов Антон... in R (язык программирования)
Байкулов Антон
Блин, я через SQL и DBI делаю.

Мой пример paste0( "SELECT * FROM t WHERE landingPage in (", vector, ")"  ) - не работает
Ну тут явно что-то банальное типо, запятых между значениями
источник

М

Марк in R (язык программирования)
Байкулов Антон
А по логам видно как шёл SQL? Это был один запрос или кучка?
а я никогда не смотрю логи в sql, не знаю как)
источник

М

Марк in R (язык программирования)
Байкулов Антон
Ну тут явно что-то банальное типо, запятых между значениями
но show_query() выдает один запрос
источник

М

Марк in R (язык программирования)
Так что врядли кучками
источник

БА

Байкулов Антон... in R (язык программирования)
Марк
аа, ну так я не разобрал еще. Филипп дал выше с glue способ
источник

PU

Philipp Upravitelev in R (язык программирования)
ребят, у paste есть аргумент collapse
источник

PU

Philipp Upravitelev in R (язык программирования)
вместо sep
источник

М

Марк in R (язык программирования)
голова уже не соображает, но тоже кину себе в закладки :)
источник

БА

Байкулов Антон... in R (язык программирования)
Philipp Upravitelev
ребят, у paste есть аргумент collapse
paste(shQuote(vector), collapse=", ")
источник

БА

Байкулов Антон... in R (язык программирования)
так?
источник

ДВ

Дмитрий Володин... in R (язык программирования)
Угу
источник

ДВ

Дмитрий Володин... in R (язык программирования)
Все элементы вектора выпишет в строку с разделителем запятой
источник

PU

Philipp Upravitelev in R (язык программирования)
можно  без  shQuote
источник

ДВ

Дмитрий Володин... in R (язык программирования)
Добавлю, что collapse не вместо sep, а можно и вместе. Там веселье начинается, если передавать несколько векторов
источник