1

次の仕様でmysqlデータベースに空のテーブルを作成しました

    Field          Type Null Key           Default                       Extra
1      Id       int(11)   NO PRI              <NA>              auto_increment
2    Date     timestamp   NO     CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
3 Country   varchar(45)  YES                  <NA>                            
4   Brand   varchar(45)  YES                  <NA>                            
5   Value decimal(10,0)  YES                  <NA>                          

ここで、RODBC パッケージの sqlSave を使用して、データ フレーム内のデータをこのテーブルに追加したいと考えています。私のデータフレームは次のようになります

     Id       Date Country  Brand Value
591 591 2013-06-22      DK bet365    44
603 603 2013-09-14      DK bet365    69
362 362 2009-01-31      DK bet365    22
296 296 2013-08-31      DK unibet    33
216 216 2012-02-18      DK unibet    24
261 261 2012-12-29      DK unibet    28
326 326 2008-05-24      DK bet365    18
521 521 2012-02-18      DK bet365    71
494 494 2011-08-13      DK bet365    44
558 558 2012-11-03      DK bet365    68

によって再作成できます

mydf<-structure(list(Id = c(591L, 603L, 362L, 296L, 216L, 261L, 326L, 521L, 494L, 558L), 
                 Date = c("2013-06-22", "2013-09-14", "2009-01-31", "2013-08-31", "2012-02-18", "2012-12-29", "2008-05-24", "2012-02-18", "2011-08-13", "2012-11-03"), Country = c("DK", "DK", "DK", "DK", "DK", "DK", "DK", "DK", "DK", "DK"), 
                 Brand = structure(c(2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), 
                                   .Label = c("unibet", "bet365", "betsafe"), 
                                   class = "factor"), 
                 Value = c(44, 69, 22, 33, 24, 28, 18, 71, 44, 68)), 
            .Names = c("Id", "Date", "Country", "Brand", "Value"), 
            row.names = c(591L, 603L, 362L, 296L, 216L, 261L, 326L, 521L, 494L, 558L), 
            class = "data.frame")

次に、次のコマンドを実行します

sqlSave(channel, dat=mydf, tablename="GoogleTrends", rownames=FALSE, append=TRUE)

エラーが発生します。

Error in odbcUpdate(channel, query, mydata, coldata[m, ], test = test,  : 
  missing columns in »data«

varTypes を追加しようとしましたが、まだ運がありません。私も sqlUpdate を試しましたが、それを機能させることはできません。明確にするために、sqlSave がテーブル自体を作成できるようにすれば、これを簡単に機能させることができます。したがって、変換に問題があると思いますが、検出できません。誰でもこれを解決する方法を知っていますか?

4

3 に答える 3

0

MySQL ODBC ドライバー バージョン 5.2 を使用している Windows システムでも同じ問題が発生しました。odbcConnect の case="nochange" 引数がうまくいきました。この引数がない場合、sqlSave はデータ フレームの列名を小文字にします。

于 2014-06-23T18:44:41.293 に答える
0

varTypes をどのように定義したかお伺いしてもよろしいですか? varTypes を使用するとうまくいくと思いました。私がすることは、既に作成されたテーブルから変数の型を取得し、R をそれにマップすることです。R 内では、この tmp <- sqlColumns(channel, tablename) のようなものを使用して、既に作成されているテーブルの vartypes を取得できます。必要なのは varspec <- tmp$TYPE_NAME です。

于 2014-01-15T01:35:09.717 に答える
0

私は非常によく似た問題に遭遇し、 here Problems with RODBC sqlSaveからfast=F にすると問題が解決することがわかりました。

于 2017-06-06T17:43:54.800 に答える