R RODBC sqlSave-按列名匹配

R RODBC sqlSave-按列名匹配,r,match,rodbc,R,Match,Rodbc,这里很难提供一个工作示例,因此我尝试解释这个问题 我在数据库tableDb中有一个表,其中列a,B,C 我在Rdf中有一个数据帧,其中包含a、C、B 现在我正在使用 sqlSave(channelToDb, dat = df, tablename = "tableDb", append = TRUE, rownames = FALSE, fast = FALSE) 从tableDb中的df保存数据 问题是,来自df的B列的数据存储在tableDb的C列中,而df的C列存储在B列中 那么sqlS

这里很难提供一个工作示例,因此我尝试解释这个问题

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

我在R
df
中有一个数据帧,其中包含
a
C
B

现在我正在使用

sqlSave(channelToDb, dat = df, tablename = "tableDb", append = TRUE,
rownames = FALSE, fast = FALSE)
tableDb
中的
df
保存数据

问题是,来自
df
B
列的数据存储在
tableDb
C
列中,而
df
C
列存储在
B
列中

那么
sqlSave
不是按列名匹配这两个表,而是按索引匹配


是否有按列名匹配的方法?

最简单的方法是在保存之前对数据框重新排序:


df最简单的方法是在保存之前对数据帧重新排序:


dfYes,当然,这是一个选项,我目前正在这样做。但是我的现实世界的表有更多的列,我认为有更好的方法可以做到这一点。你可以自己编写一个函数,从数据库中读取字段名,并将它们作为临时帧中的列表放入,然后保存出来。你只需要给它一个数据库名、数据框和文件名,它就可以为你做所有的事情。是的,当然这是一个选项,我目前正在这样做。但是我的现实世界的表有更多的列,我认为有更好的方法可以做到这一点。你可以自己编写一个函数,从数据库中读取字段名,并将它们作为临时帧中的列表放入,然后保存出来。您只需要给它一个数据库名、数据帧和一个文件名,它就可以为您完成这一切。
sqlSave(channelToDb, dat = df_to_table, tablename = "tableDb", append = TRUE,
rownames = FALSE, fast = FALSE)