2012-09-16 41 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 <- 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:schema.dataframe在第一種情況下在你的數據庫中,而table1在R在第二種情況下。