Excelデータを読み込む
Rが読み込むデータは機械可読なテキストファイルであるcsvデータが最も親和性が高い。 しかし、Excelのワークシートであるxls形式または最新のxlsx形式のファイルを直接読み込むことも可能である。 そのためには、パッケージ gdata を使う。
以下の例でわかるように、Excelワークシートデータを直接読み込むことができると、csvファイルで気を配った文字コード変換に迷わされることから解放される。
Rライブラリ gdata
Rの[パッケージとデータ]/[パッケージインストーラ]から、gdataを入力して「一覧を取得」。 gdataを選択し、「選択をインストール」で、gdata がインストールされる。
RStudioでは、[Package/Install]から目的のパッケージ名 gdata を正しく入力して[Install]ボタンを押す。 すると、コンソールに次のようにinstall.packages("gdata")コマンドが実行されてダウンロードされたことがわかる。
Rを起動して、gdataライブラリを使うには次のように入力するだけだ。
> library(gdata)gdataライブラリの詳しい使い方を知りたければ、つぎのようにヘルプを呼び出す。
> ?gdata
Excelワークシートデータの読込
Excelワークシートを直接読み込むには、以下のようにパッケージ gdataの関数 read.xls( ) を使う。
成績データseiseki.xlsは、3枚のシートからなっているワークシートである。 sheet1は半角英数字だけからなる表データ(ただし、3行目から7行目には「別の」小さな表が占めている)、sheet2はラベル行に漢字を使った表データ(1-2行目は空白)、sheet3はsheet1のラベルを全て漢字で表記したものである。
sheet2を読み込む
read.xls( ) で指定したシートを読むにはオプション sheet=シート番号 を使う。 シートは名前でなく番号で識別される。 sheet2は番号であるので、次のようになる。 read.xls( ) では、read.table( )とは違って、ラベル行を使うという header=T オプションは不要だ。 また、読み飛ばす先頭から2行空白は自動的に処理されることにも注意しよう。
> df2 <- read.xls("seiseki.xls",sheet=2) Wide character in print at /Users/umeko/Library/R/2.13/library/gdata/perl/xls2csv.pl line 262. > str(df2) 'data.frame': 200 obs. of 6 variables: $ 番号: Factor w/ 200 levels "a111","a112",..: 1 2 3 4 5 6 7 8 9 10 ... $ 性別: int 0 1 0 1 1 1 1 0 0 0 ... $ 英語: int 68 38 51 62 82 44 48 47 77 89 ... $ 国語: int 76 62 62 77 69 72 72 64 77 58 ... $ 数学: int 71 33 88 52 93 57 66 57 55 25 ... $ 平均: logi NA NA NA NA NA NA ...
日本語が混じっていても、ちゃんと表示してくれることがわかる。 実際、たとえば英語得点の列データにアクセスするためには、次のように記号 $ を使って df2$英語 とすればよい。
> df2$英語 [1] 68 38 51 62 82 44 48 47 77 89 51 61 73 48 44 74 57 47 60 50 65 46 91 53 83 74 79 45 64 67 [31] 54 49 72 43 64 44 62 70 51 56 59 53 44 42 37 61 62 28 73 54 60 64 44 67 30 71 69 58 55 87 ........ [151] 82 29 60 58 63 62 62 71 97 61 58 85 83 67 53 48 71 75 73 54 53 68 63 40 46 89 57 65 89 47 [181] 68 77 60 49 82 60 46 71 46 60 51 45 74 35 53 71 64 67 71 90
sheet1を読み込む
read.xls( ) のデフォルトのシート番号は「1」であるので、sheet1を読み込むにはsheetオプションは使わない。 read.xls( ) では、read.table( )とは違って、ラベル行を使うという header=T オプションは不要。 ここで重要なのは、先頭から数えて、「空白行を除いた」6行をスキップすると指定することである。
> df1 <- read.xls("seiseki.xlsx",skip=6) > str(df1) 'data.frame': 200 obs. of 6 variables: $ Stnum: Factor w/ 200 levels "a111","a112",..: 1 2 3 4 5 6 7 8 9 10 ... $ Sex : int 0 1 0 1 1 1 1 0 0 0 ... $ Eng : int 68 38 51 62 82 44 48 47 77 89 ... $ Lang : int 76 62 62 77 69 72 72 64 77 58 ... $ Math : int 71 33 88 52 93 57 66 57 55 25 ... $ Ave : logi NA NA NA NA NA NA ...
sheet3を読み込む
では、漢字の混じったフツウのExcelの3枚目のシートを読み込んでみよう。 上記の2つ場合から、わかるように次のようにする。 sheet=3 と3枚目のシートであることを指定し、先頭から数えて、「空白行を除いた」6行をスキップするわけだ。
> df3 <- read.xls("seiseki.xlsx",sheet=3,skip=6) > str(df3) 'data.frame': 200 obs. of 6 variables: $ 番号バンゴウ: Factor w/ 200 levels "a111","a112",..: 1 2 3 4 5 6 7 8 9 10 ... $ 性別セイベツ: int 0 1 0 1 1 1 1 0 0 0 ... $ 英語エイゴ : int 68 38 51 62 82 44 48 47 77 89 ... $ 国語コクゴ : int 76 62 62 77 69 72 72 64 77 58 ... $ 数学スウガク: int 71 33 88 52 93 57 66 57 55 25 ... $ 平均ヘイキン: logi NA NA NA NA NA NA ...