我一直在使用RODBC连接到工作中的DB2数据库,到目前为止一切运行良好。我可以通过sqlQuery拉表,并在将数据库作为数据框返回之前连接数据库中的表。但是,我经常通过抓取和操作表,然后将它们连接回数据库来加速SAS中的过程。当我尝试在R中执行此操作时,我遇到了问题。我希望它能像这样。
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中的数据库中的表?或者我可以以某种方式使数据框成为临时表并从那里加入它?
答案 0 :(得分: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]
在这两种情况下,您最终会得到一个“辅助”对象:在数据库中第一种情况下为schema.dataframe,在第二种情况下为R中的table1。