R_sqLite_Excel の変更点 - アールメカブ

アールメカブ


R_sqLite_Excel の変更点


[[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