« 2017年12月 | トップページ | 2018年2月 »

2018年1月10日 (水)

[R]Accessのファイル(*.accdb)の中身を読み込む

RでAccessのファイル(*.accdb)の中身を簡単に読み込むには、パッケージRODBCを使えばよい。ただし、Rの環境とは別に、ウィンドウズ自体に、Accessのデータベースエンジンをインストールしておく必要がある。これはフリーウェアとしてマイクロソフトのウェブサイトで公開されており、簡単にインストールできる。

まず、パッケージRODBCは初期状態ではインストールされていないため、パッケージRODBCをインストールする。

> install.packages("RODBC")

まず、Accessのデータベースエンジンをインストールしていない環境では、Accessのファイルを読み込もうとすると(例ではファイルをsample.accdbと指定)、以下のようなエラーメッセージが表示される。

> library(RODBC)
> odbcConnectAccess2007("sample.accdb")
[1] -1
警告メッセージ:
1:  odbcDriverConnect(con, ...) で:
  [RODBC] ERROR: state IM002, code 0, message [Microsoft][ODBC Driver Manager] データ ソース名および指定された既定のドライバーが見つかりません。
2:  odbcDriverConnect(con, ...) で:  ODBC connection failed

コントロールパネルの「管理ツール」→「ODBC データ ソース (64 ビット)」(Windows7の場合は「データ ソース (ODBC)」)を選択。

現れたダイアログの「ドライバー」タブを選択する。以下は表示例だが、名前のところに、「Microsoft Access Driver (*.mdb, *.accdb)」が含まれていないはず。これがなければRでAccessのデータベースファイルを読み込むことができない。

1

必要なファイルをインストールする。

データベースエンジンをインストールする。マイクロソフトの公式ページからダウンロードする。

Microsoft Access データベース エンジン 2010 再頒布可能コンポーネント
https://www.microsoft.com/ja-jp/download/details.aspx?id=13255

2017年12月時点の最新版は、2016年7月1日に公開されたバージョンSP2。言語を選択で日本語を選択し、「ダウンロード」と書かれた赤いボタンをクリックすると、ファイルを選択する画面に移る。以下の2つのファイルが選択できる。

AccessDatabaseEngine.exe
AccessDatabaseEngine_X64.exe

32ビット版のウィンドウズであれば上を、64ビット版であれば下のファイルをダウンロードする。ダウンロードしたら、実行してインストールをする。

データベースエンジンをインストールしたら、前述のコントロールパネルの画面を再度確認する。無事にインストールされていれば、以下の例のように「Microsoft Access Driver (*.mdb, *.accdb)」が含まれているはず。

2

これでパッケージRODBCを使用して*.accdbファイルを読み込めるようになった。Rで試してみる。パッケージを選択してodbcConnectAccess2007関数で読み込んでみる。

> library(RODBC)
> odbcConnectAccess2007("sample.accdb")
RODBC Connection 3
Details:
  case=nochange
  DBQ=○:\○○\sample.accdb
  Driver={Microsoft Access Driver (*.mdb, *.accdb)}
  DriverId=25
  FIL=MS Access
  MaxBufferSize=2048
  PageTimeout=5
  UID=admin

*.accdbファイルを読み込める状態であれば、上記のように表示される。

2018年1月 8日 (月)

[R]データフレーム内のデータを2つ以上の列(フィールド)でソートする

データフレームに含まれるデータについて、2つ以上の列(フィールド)でソートを行う方法。order関数を使えばよい。ただし、order関数は並び替えられたインデックスを返すだけなので、実際にその並び替えられたデータフレームを作成するには、元のデータフレームにそのインデックスを指定する必要がある。

以下は、3行2列のデータフレームを1列目と2列目の値でソートした例。order関数はデフォルトでは昇順にソートする。これを降順にしたいのであれば、decreasingオプションをTRUEにする必要がある。

> dtf <- data.frame(V1 = c("B", "A", "B"), V2 = c(3, 2, 1))
> dtf
  V1 V2
1  B  3
2  A  2
3  B  1
> order(dtf$V1)
[1] 2 1 3
> order(dtf$V2)
[1] 3 2 1
> order(dtf$V1, dtf$V2)
[1] 2 3 1
> dtf[order(dtf$V1, dtf$V2), ]
  V1 V2
2  A  2
3  B  1
1  B  3
> dtf[order(dtf$V1, dtf$V2, decreasing = TRUE), ]
  V1 V2
1  B  3
3  B  1
2  A  2

なお、それぞれソートを指定する列ごとに昇順、降順を指定する方法はない。

« 2017年12月 | トップページ | 2018年2月 »

無料ブログはココログ

■■

■■■