2012-09-16 4 views
3

저는 RODBC를 사용하여 직장에서 DB2 데이터베이스에 연결 했으므로 모든 것이 잘 작동합니다. sqlQuery를 통해 테이블을 가져 와서 데이터 프레임으로 다시 가져 오기 전에 데이터베이스 내의 테이블을 조인 할 수 있습니다. 그러나 나는 종종 테이블을 잡아서 조작 한 다음 데이터베이스에 다시 결합하여 SAS에서 프로세스를 가속화했습니다. R에서이 작업을 수행하려고하면 문제가 발생합니다. 이런 식으로 가고 싶습니다.RODBC는 sqlQuery의 테이블에 데이터 프레임을 결합합니다.

library(RODBC) 
channel <- odbcConnect(database stuff) 
dataframe <- sqlQuery(channel, query) 
. 
. 
manipulate data frame 
. 
. 
dataframe <- sqlQuery(channel, 
    "select * from dataframe as a INNER JOIN schema.table1 as b ON a.id=b.id") 

문제는 "R"이 "데이터 프레임"을 인식하지 못한다는 것입니다. 저는 그것이 "schema.dataframe"부분과 관련이 있다고 생각합니다. 작업 공간에 어떤 종류의 "스키마"가 있는지 모르겠습니다. sqlQuery에서 데이터베이스의 테이블에 데이터 프레임을 결합하는 방법이 있습니까? 아니면 어떻게 든 데이터 프레임을 임시 테이블로 만들고 거기에서 결합 할 수 있습니까?

답변

1

당신은

sqlSave(channel, dataframe) 

(참조? 옵션에 대한 sqlSave) 다음은 쿼리를 수행하여 데이터베이스에 테이블로 dataframe을 절약 할 수 있습니다.

dataframe <- sqlQuery(channel, 
    "select * from schema.dataframe as a INNER JOIN schema.table1 as b ON a.id=b.id") 

아니면 (data.table 사용) 및 수행 R에 가입 할 수 있습니다 :

library(data.table) 
dataframe <- data.table(dataframe) 
setkey(dataframe, id) 
table1 <- data.table(sqlQuery(channel, 
    "select * from schema.table1") 
setkey(table1, id) 
dataframe <- dataframe[table1, nomatch=0] 

를 두 경우 모두 당신이 "보조로 끝날 것 채널 포인트에"스키마 "가정 "object : db의 첫 번째 경우에는 schema.dataframe이고 두 번째 경우에는 R의 table1입니다.

관련 문제