1 日 30 分くらい，30 日で何とかＲをそこそこ使えるようになるための練習帳：Win 版	 
ver.0.95（ほぼ完成版）	 

９日目：項目のチェック（３）	  今日は，度数分布表を作ったり，ヒストグラムを書いたりしてみましょう。なお，今回は項目のチェックが目的なので，あまり込みいった度数分布表などは作りませんので。あくま
でも，ある項目で，１の回答が○名，２が△名…といったことを把握するレベルです。	  ネットとかを検索しても，度数分布表の作り方は数多く紹介されています。そこでつかわれているのは table()です。
table(x[5])table(x$年齢)	  これだけの指示で簡単な度数分布表を作ってくれます。しかし，問題なのは欠損値をまったく無視してしまうところです。たとえば，b1 には欠損値がありますが，table(x$b1)で実行すると…	 	 	  このように出力されます。上の段がカテゴリ，下の段が度数を表しますので，１が２名，２が６名…「NA」は…？？わかりません…	 	  欠損値も表に含めたいなら，以下のように exclude=NULL を入れる必要があります。	 
table(x$b1, exclude=NULL)	  するとうまくいきます。	  これで十分と言いたいところですが，欲張れば，％計算もやってほしい。ということで，これらの計算も一緒にやらせることはできないかと探したら，prettyR というパッケージにある，freq が使えるということでした。	 	  そこで，まずは prettyR というパッケージをインストールしてください。	 	  入手できたら，まずはそれを呼び出し，以下のように入力してください。	 
library(prettyR)
fr <- freq(x$b1)
9-1

1 日 30 分くらい，30 日で何とかＲをそこそこ使えるようになるための練習帳：Win 版	 
ver.0.95（ほぼ完成版）	 

print(fr, cum.pc=TRUE, show.total=TRUE)	 	  これで b1 の，度数合計（Total），各カテゴリの度数と割合（NA を除いた％（%!NA）と，それを込みにした％（cum%）），累積％（%）とともに作成してくれます。	 	 	 ただし，このままだと，カテゴリを度数の多い順に勝手に並べ替えてしまいます（右図を見てください）。それを防 ぐ た め に は ， ２ 行 目 に decr.order=FALSE を 入 れ ， fr <-freq(x$b1,decr.order=FALSE)としておく必要があります。	 	 
なおこの２行の命令を読み解いてみると，freq で計算した結果を一度 fr という新しい入れ物に入れ，さらに print で fr の出力調整をしているということになります。Ｒには，このように計算結果をいったん何かに入れ，結果表示コントロールを別に行って出力するという場合が少なくないようです。基本的に，これは結果を見やすくするためのようです。	 	  ちなみに３行目の print の部分をつけないと，Total と cum%は出力されません。
show.total=TRUE と cum.pc=TRUE が入っているところに注目すればすぐにピンとくるでしょう。	  複数変数をまとめてやりたい時は，freq(x[2:5], decr.order=FALSE)といった指定でうまくいきます。また v3 <- c("性別","b2","b4","no")などと変数名をまとめておいて，freq(x[v3], decr.order=FALSE)で一気に計算することもできます。	  では次に，ヒストグラムを作成してみます。繰り返しますが，ここでは項目チェックに使える簡単なものを目指します。	 
hist(x$年齢)	  これだけを，実行してみてください。	 	  これでどういう表示になるのか確認してください。	 	 

9-2

1 日 30 分くらい，30 日で何とかＲをそこそこ使えるようになるための練習帳：Win 版	 
ver.0.95（ほぼ完成版）	 	 	  このように，R で作図をしようとすると，図用の新しいウインドが開きます。通常のウインドと同様，縁にカーソルを合わせてドラッグすることで大きさを変えることができます（おそらく，デフォルトの大きさで特に問題ないかと思います）。	 	  なお，いまは図表のタイトルが「Histogram of x$年齢」になっていますが，hist(x$年
齢 , main="○○")と入力すれば，自由に図表のタイトルをつけることができます。	 	 
またこの「Device 2」というウインドですが，１枚の紙のようなイメージをもってもらえるとよいと思います。では，３回 hist()を実行すると，どうなるでしょうか。ためしに，以下の命令を実行してみてください。	 
hist(x$b1)
hist(x$b2)
hist(x$b3)
	  「Device 2」のウインドには，最後の x$b3 の結果だけが表示されていると思います。x$b1	 
9-3

1 日 30 分くらい，30 日で何とかＲをそこそこ使えるようになるための練習帳：Win 版	 
ver.0.95（ほぼ完成版）	 

や x$b2 の結果はどこに行った？ということになるのですが，残念なことに上書きされてしまって見ることができません…。これはさすがに困りますね。	 	  そこで，①windows()を使う，②par(mfrow=c( , ))を使うという二通りの解決策を紹介します。	 
①windows()を使う	 
一度このコマンドをこのまま入力してみてくだ
さい。すると，右のようなウインドが開くと思います。ここから分かるように，windows()というコマンドは，先に挙げた例にならうなら，白紙の紙を１枚用意するコマンドなのです。
そして，このコマンドを入力して新しいウインドを開いてから hist()を入力すれば，新しい方のウインドに図表が描かれます。	  要は，「紙が１枚しかないせいで上書きするのだから，紙を増やそう」と考えるわけです。	 
当然，2 つ以上の図表を作るときは，その度ごとに windows()と入力し，白紙のウインドを開く必要があります。
②par(mfrow=c( , ))を使う	  ま ず ， 括 弧 の 中 に 数 字 を 入 れ ，par(mfrow=c(3,3))と入力してみてください。もし既に描画ウインドが開いていれば何も反応は無く，描画ウインドが開いていなければ①のときと同じようなウインドが開くと思います。その状態でもう一度hist(x$b1)
hist(x$b2)
hist(x$b3)と入力してみてください。すると，右図のようになります。	 	  par(mfrow=c( , ))を使うと，括弧の中の数字に応じて（今回は 3×3）画面を分割し，図表を小さくして入れることができます。
9-4

1 日 30 分くらい，30 日で何とかＲをそこそこ使えるようになるための練習帳：Win 版	 
ver.0.95（ほぼ完成版）	 	  ところが，この画面が図表でいっぱいになったときは，やはり上書きされてしまいます…。	 
また，出力された図表を右クリック→「メタファイルにコピー」もしくは「ビットマップにコピー」すれば，ワードやエクセルに貼り付けることができますし，また図表を保存することもできます（図表ウインドをアクティブにして，メニューバーから「ファイル」→「別名で保存」を選べば，保存形式を選ぶこともできます）	 	  さて，hist(x$年齢)の部分ですが，変数さえ指定すれば（x[,3]という「,」付きなら列番号指定も可），適当にヒストグラムを作成してくれます。これに関するオプションの設定もたくさんあるので，自分の望むものを出力できるように web などで調べてみましょう。	 	 	  今回のように，項目単位での回答の分布を見るなら，ちょっと掟破りっぽいものでもいいのかなと思ったり

Histogram of x$b16します。b1 から b5 は１から５までの５件法なので，5それぞれのカテゴリに何ケースあるのかがはっきりと312

左端，右端，幅の３つの数値を入れます。ヒストグラ
ムとしてどうか，ということは置いておきますが，１0どうかと思います。breaks=seq の後は，グラフのFrequency

breaks=seq(0.5, 5.5, 1))などと指定するのは4わかる方がよいでしょう。それなら，hist(x$b1,から５の選択肢の真上に棒の部分がのるため，私にとっては使いやすい（チェックしやすい）ものになりま

12345x$b1す。	 	 	  さて，あとはいくつかの変数をまとめて，一気にヒストグラムを作らせたいのですが，これがなかなか難しいようです。	 	  いくつか試しましたが，ことごとくエラー…	 	 	  	 
9-51 日 30 分くらい，30 日で何とかＲをそこそこ使えるようになるための練習帳：Win 版	 
ver.0.95（ほぼ完成版）	 

結局，このようなものに行き着きました…	 
for (a in 4:8) { hist(x[,a]) }	  for (a in 4:8)は，a を４から８まで，１ずつ動かしなさいという命令です。そしてその命令を受けるのが{ }の中です。そこに hist(x[,a])を入れれば，a が先の命令を受けるので，hist(x[,4])，	 hist(x[,5])，…	 hist(x[,8])と順にやってくれるという仕組みです。	 	  これを使って，b1 から b5 までのヒストグラムを１枚（３行３列）に収まるように出力したのが以下の例です。	 
par( mfrow=c(3,3))
for (a in 4:8) { hist(x[,a], breaks=seq(0.5, 5.5, 1)) }	  まあ，「これでもいいか…」くらいの出来です。問題は for を使うと次ページの結果のよ
うに変数名が表示されないこと。間違えないようにしないと…	 	 	 	  これで９日目は終了です。明日は，相関係数を算出してみます。

9-6

1 日 30 分くらい，30 日で何とかＲをそこそこ使えるようになるための練習帳：Win 版	 
ver.0.95（ほぼ完成版）	 

9-7