Help us understand the problem. What is going on with this article?

Oracle R Enterprise経由で主キーになる列がないcsvファイルをデータベースにロードする方法

More than 3 years have passed since last update.

IDのないデータフレームをOREでロードする

Rで使うデータフレームもベクトルの組のため、順列を明確に持ったものです。ただデータベースの表は集合のため、順列に通常意味をなしません。
Oracle R Enterpriseでは、データベースのテーブルをdata.frameライクのore.frameとして扱います。その際に、ore.frameで出力される値が不確定の場合には、デフォルトではエラーが出ます。また、このエラーが出る状態では、predict関数などをore.frameの状態では使えないなど、インデータベースのよさが消えてしまいます。

エラーを出さないようにするには、ore.frameのデータが前列に対してソートされていること、主キーが定義されていること、一意のrow.namesを持つことの条件のいずれかを満たす必要性があります。

主キーがある場合には特に問題になりませんが、主キーとなるようなデータがロード元のCSVファイルなどにない場合に、その後主キーを決めずにore.frame順序問題を回避するtipsを下記に記します。

2008.csvというcsvファイルをRで読込みore.createを使用してAIR2008というテーブルを作成します。

OracleREnterprise1.5
df <- read.table("2008.csv",header=T,sep=",")
ore.create(cbind(ID = 1:nrow(df),df),table ="AIR2008")

ポイントとしては、ore.createする際に、cbind(ID=1:nrow(df),df)とすることによって、dfに1から順に始める連番を付けることができ、それをIDとしてAIR2008テーブル作成の段階で元のCSVファイルに対して追加しています。このままでは、まだエラーが出続けるので、OREと同期後、row.namesにID列を登録します。一意の列があるデータフレームのロードの場合には、その列名をrow.namesに登録しても大丈夫です。

OracleREnterprise1.5
ore.sync()
ore.attach()
row.names(AIR2008) <- AIR2008$ID
head(AIR2008)

以上がID列がないCSVファイルをORE経由でデータベースにロードする方法です。
ただし、あくまでのOREオブジェクトとして、row.namesが保存されているため、ore.saveで保存しないとセッションが切れるたびにrow.namesはnullになってしまうことに注意が必要です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした