[(株)数理システム]

(S-PLUS) S-PLUS mini course 第5回


S-PLUS mini course の5回目をお届けします。

数理システムのオフィスは、新宿御苑のすぐそばにあり、窓からは御苑の桜を眺めることができます。ここは日本一桜の品種が多い公園らしいです。今年はほぼ、終わってしまいましたが(それでも、八重なんかは今も見ごろです。花の時期が長いのも魅力のひとつです)、来年の桜の時期には、どうぞお花見がてら弊社にお越しください。

さて、前回は apply を使うときの注意点と、関数 lapply という関数 をご紹介しました。今回は、その親戚をご紹介します。

*********** 今回の関数 *****************
tapply
***************************************

男性女性ごとに、テストの点数の平均を計算したい、というのは よくありますよね。そのときに使えるのが、この tapply です。

例えば、「あるテスト」という名前のデータ・フレーム(Excel からインポートした)の「数学」の平均を、「性別」ごとに計算するには、

tapply(あるテスト$数学, あるテスト$性別, mean)

とします。apply なんか指定方法は同じですよね。2番目の引数が 「...ごとに」をあらわすデータとなります。そして、3番目の引数にも、apply 同様、関数の名前が指定されます。それから、具合が悪くて試験をお休みした生徒がいて、NA がある場合(先生によっては0点かもしれませんが)も、4個目以降の引数に 名前 = 値 の形で指定することができます。

この関数は基本的に apply と同じ性質を持ちます。つまり、答えはベクトルとして得られます。

じゃ、「クラス」の「性別」ごとに平均を求めたいときはどうしたらよいでしょうか?つまり、キーが2つあるときです。そんなときは、第2引数を2つの変数からなるリストにしておきます。例えば、

tapply(あるテスト$数学, list(あるテスト$クラス, あるテスト$性別), mean)

この関数のよいところは、データを第2引数に与えた「性別」でソートしておく必要がないことです。

この関数は、ベクトルが返る関数を当てはめるときには便利ですが、「性別ごとに回帰をしたい」なんていうとき、答えがベクトルになる、という制約のせいでうまくいかないことがあります。次回はこれを解決する関数をご紹介しましょう。お楽しみに!

----------------------------------------------------------------

? お問い合わせ/資料請求はお気軽に。
(株)数理システム《S-PLUS》グループ <splus-info@ml.msi.co.jp>