Как передать несколько идентификаторов в пакетах и ​​чем объединить его в R - PullRequest
2 голосов
/ 28 марта 2019

У меня есть упомянутый ниже фрейм данных в R.

DF1

ID       Sales         Cost       Value
RTT-123  10            10000      15000
RTT-456  15            12000      17000
RTT-789  14            14000      19000

Фрейм данных содержит почти ~ 30K уникальных идентификаторов, при передаче этих идентификаторов в красное смещение с использованием нижеуказанного запроса, я получаюошибка Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ", :

Как автоматически передавать эти идентификаторы в пакете идентификаторов 2K при выполнении запроса, а затем объединить вывод в один отдельный кадр данных в R.

Запрос:

df2<-paste0("SELECT ID,list1,list2, date1 FROM table1 b
            WHERE b.ID IN (", paste(shQuote(DF1$ID , type = "sh"),collapse = ','),");")

output<-dbGetQuery(link,df2)

1 Ответ

0 голосов
/ 28 марта 2019

Примерно так (не проверено), здесь мы используем 1000 идентификаторов за раз, настройте в соответствии с вашими потребностями:

library(data.table) # rbindlist

output <- rbindlist(
  lapply(
    # 1000 chunks
    split(DF1$ID, ceiling(seq_along(DF1$ID)/1000)), 
    function(i){
      df2 <- paste0("SELECT ID,list1,list2, date1 FROM table1 b
                     WHERE b.ID IN (",
                    paste(shQuote(i , type = "sh"), collapse = ','),
                    ");")
      dbGetQuery(link, df2)
    }))
...