3

我一直在使用 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 中将数据框连接到数据库中的表?或者我可以以某种方式将数据框设为临时表并从那里加入吗?

4

1 回答 1

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。

于 2015-05-30T15:44:59.237 回答