2017-06-22 73 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