web-dev-qa-db-ja.com

dplyrパッケージを使用してSQLiteデータベーステーブルに行を挿入(追加)することは可能ですか?

Dplyrパッケージのデータベース接続機能は初めてですが、SQLite接続に使用することに非常に興味があります。私は このチュートリアル に従い、SQLiteデータベース(my_db)を作成しました

my_db <- src_sqlite("my_db.sqlite3", create = T)

そして、このデータベースのテーブル(my_table)としてデータフレーム(df)を挿入しました。

copy_to(my_db,df,"my_table")

次に、このテーブルに新しい行を挿入します。私はこのようなことを試しました(そして、はい、それが有望に見えないことを認めなければなりません...しかし、私はまだそれを試しました):

collect(build_sql("INSERT INTO my_table VALUES (",newdf,")", con=my_db))

Dplyrを使用して既存のsqlitedbテーブルに行を追加することさえ可能かどうか誰かが知っていますか?または、この問題にどのように対処しますか?よろしくお願いします!

24
rdatasculptor

candplyrを介して作成されたデータベース/テーブルに対してSQL操作を実行しますが、RSQLite/DBI呼び出しに戻り、データベース/テーブルの作成方法を変更する必要があります。

library(dplyr)

my_db <- src_sqlite("my_db.sqlite3", create=TRUE) 
copy_to(my_db, iris, "my_table", temporary=FALSE) # need to set temporary to FALSE

# grab the db connection from the object created by src_sqlite
# and issue the INSERT That way

res <- dbSendQuery(my_db$con, 
                   'INSERT INTO my_table VALUES (9.9, 9.9, 9.9, 9.9, "new")')
10
hrbrmstr

いいえ、あなたはcanこれをすべてdplyr内で行います。

require(dplyr)

my_db <- src_sqlite( "my_db.sqlite3", create = TRUE)                 # create src
copy_to( my_db, iris, "my_table", temporary = FALSE)                 # create table
newdf = iris                                                         # create new data
db_insert_into( con = my_db$con, table = "my_table", values = newdf) # insert into
56
StatSandwich

このニュースグループ 。ハドリーは関数dplyr::copy_to()の目的を説明しました。一時的なテストテーブルを作成することを目的としています。電子メール交換は、RMySQL::dbWriteTable()を使用して既存のテーブルにデータを追加することを提案することで終了します。上記の受け入れられた回答で説明されているように、同じことがSQLiteデータベースにも当てはまります。

既存のデータベーステーブルと同じ列名を持つデータフレームdtfを追加するために、次を使用しました。

library(RMySQL)
DB <- dbConnect(MySQL(), user="usename", Host="localhost",
                   password="***", dbname="dbname")
dbWriteTable(DB, "tablename", dtf, append=TRUE, row.names = FALSE)
13
Paul Rougieux

dplyrを使用してデータベースに書き込む主な理由は、コードの途中で言語を切り替えたくないからです。あなたの質問に対する最善の解決策は、 StatSandwich で示されているように、dplyrdb_insert_into()関数を使用することです。

1
Kevin Ogoro