2017-06-22 74 views
0

在这里很难提供一个工作示例,所以我试图解释这个问题。R RODBC sqlSave - 按列名匹配

我在数据库tableDb中有一个表,其列A,B,C

我有一个R df的数据框与列A,C, B

我现在用的

sqlSave(channelToDb, dat = df, tablename = "tableDb", append = TRUE, 
rownames = FALSE, fast = FALSE) 

保存数据从dftableDb

的问题是,从列中的数据的dfB被存储在tableDbC柱和dfC存储在B柱。

因此sqlSave不按列名称匹配两个表,而只是通过索引?

有没有办法按列名匹配?

回答

0

最简单的是做,这是保存之前重新安排你的数据帧:

df<-df[c("A", "C", "B")]

这将会把数据帧中的相同顺序表或者你可以我们的临时数据帧

df_to_table<-df[c("A", "C", "B")]

然后

sqlSave(channelToDb, dat = df_to_table, tablename = "tableDb", append = TRUE, 
rownames = FALSE, fast = FALSE) 

如果你要保持你的enivronment干净小,则只是删除后,该临时表...

rm(df_to_Table)

,你回你原来的工作空间,在您的环境中的原始df和您的变量以正确的顺序保存到您的表格中。

+0

是的,当然这是一个选项,我目前正在这样做。但我的真实世界表有更多的专栏,我认为有更好的办法。 – schluk5

+0

您可以自己编写一个函数,它从数据库中读取字段名称,并将它们作为列表放入临时框架中,然后将其保存。你只需要给它数据库名称,数据框和一个文件名,它可以为你做到这一切。 – sconfluentus