R_sqLite_Excel のバックアップ(No.1) - アールメカブ

アールメカブ


R_sqLite_Excel のバックアップ(No.1)


Rの備忘録

> install.packages ("xlsReadWrite")
> library (xlsReadWrite)
# インストール直後には以下を実行する必要があります
# xls.getshlib() 

# Excel のシートからデータフレームを作成
> (x <- read.xls ("Book1.xls", sheet = "Book1") )
  ID Name Sex Grade
1  1   あ  男    60
2  2   い  男    65
3  3   う  女    70
4  4   え  男    75
5  5   お  女    80

> # データフレームからエクセル・ファイルを作成
> write.xls (iris, file = "iris.xls")
>
> # データベース風にエクセル・ファイルにアクセス
> install.packages ("RODBC")
> library(RODBC)
> getwd()
[1] "C:/workhome"
> # エクセル・ファイルにアクセス
> con <- odbcConnectExcel("Book1.xls", readOnly= FALSE)
> # ファイルの概要を表示
> sqlTables (con)
            TABLE_CAT TABLE_SCHEM TABLE_NAME   TABLE_TYPE
1 C:\\workhome\\Book1        <NA>     Book1$ SYSTEM TABLE
2 C:\\workhome\\Book1        <NA>    Sheet2$ SYSTEM TABLE
3 C:\\workhome\\Book1        <NA>    Sheet3$ SYSTEM TABLE
  REMARKS
1    <NA>
2    <NA>
3    <NA>
> # データベースからデータフレームを作成
> (x <- sqlQuery (con, "select * from [Book1$]"))
  ID Name Sex Grade
1  1   あ  男    60
2  2   い  男    65
3  3   う  女    70
4  4   え  男    75
5  5   お  女    80 

> is.data.frame(x)
[1] TRUE
> # データベース風に抽出も可能
> sqlQuery (con, 'select Grade from [Book1$] where Grade >  70')
  Grade
1    75
2    80
> sqlQuery (con, "update [Book1$] set Sex = 'F' where Sex =  '女'")
character(0)
> # エクセル・ファイルとの接続を切る
> odbcClose (con)
> 
> library(RSQLite)
 要求されたパッケージ DBI をロード中です 
> 
> drv <- dbDriver( "SQLite")
> setwd("C:/sqlite")
>  # データベースにアクセス
> con <- dbConnect(drv, dbname = "test.db")
> # テーブルを表示
> dbReadTable (con, "test")
  id name sex
1  1 山田   M
2  2 佐藤   F
>
> # 「iris」データフレームをデータベースに登録
> dbWriteTable (con, value = iris, name = "iris" )
[1] TRUE
> # 登録されたデータを確認
> dbReadTable (con, "iris")
    Sepal_Length Sepal_Width Petal_Length Petal_Width
1            5.1         3.5          1.4         0.2
2            4.9         3.0          1.4         0.2
3            4.7         3.2          1.3         0.2
… 中略
       Species
1       setosa
2       setosa
3       setosa
… 以下略 

> # 条件抽出してみる
> dbGetQuery (con, "select * from iris where Petal_Width > 2")
   row_names Sepal_Length Sepal_Width Petal_Length
1        101          6.3         3.3          6.0
2        103          7.1         3.0          5.9
3        105          6.5         3.0          5.8
… 中略
   Petal_Width   Species
1          2.5 virginica
2          2.1 virginica
3          2.2 virginica
… 以下略
> # 「Petal_Width」フィールドの平均を求める
> dbGetQuery (con, "select avg (Petal_Width) from iris")
  avg (Petal_Width)
1          1.199333
> # データベースとの接続を切る
> dbDisconnect (con)
[1] TRUE