Rで表計算
RはExcelより圧倒的に楽に複雑な計算が出来ることが多いのだが、Excelで簡単にできるような計算に思わず苦労することがあったりする。というので、Excelで慣れ親しんだ単純な表計算をRを使ってやってみよう。
二次元の表
氏名 | 国語 | 数学 | 社会 | 理科 | 合計 |
---|---|---|---|---|---|
安倍 | 66 | 54 | 57 | 87 | |
飯田 | 64 | 34 | 87 | 55 | |
石黒 | 87 | 欠席 | 65 | 64 | |
中澤 | 98 | 64 | 90 | 65 | |
福田 | 欠席 | 36 | 75 | 72 | |
平均 |
各要素へのアクセスは一般的なプログラミング言語の二次元配列とは異なり、要素[行番号,列番号]。
行列の入れ替え
t関数…行・列の入れ替え
- t(X)
-
表matrixの行列を入れ替える。
- X=表(matrix)データ
「行列の入れ替え(切り替え)」。グラフ作成するときなどに使う。
行単位・列単位の計算
上記表で個人ごとの合計と科目ごとの平均を求めたい。
Excelなら相対参照+オートフィル(数式コピー)でちょちょいのちょいだが、Rではどうすれば良いだろうか。
プログラミングになれた人なら、ループを廻して、と思うだろう。
もちろんこれでも出来るが、Rはこの手の計算に関しては一般的な言語より遙かに関数が充実している。ループを廻すより、なるべく関数で処理する方が良い。
apply関数…行・列単位集計
- apply(X, MARGIN, FUN)
-
表matrixを行単位または列単位に処理を行う。
- X=表(matrix)データ
- MARGIN=行単位1ないし列単位2で集計する
- FUN=関数名ないし関数定義
セルごとの計算
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
---|---|---|---|---|---|---|---|---|---|
1 | |||||||||
2 | |||||||||
3 | |||||||||
4 | |||||||||
5 | |||||||||
6 | |||||||||
7 | |||||||||
8 | |||||||||
9 |
行×列で九九表を作りたい。Excelなら絶対参照と相対参照の組み合わせで、一般的なプログラミング言語なら二重ループでやるところ。
Rでは行データ一つ一つに列データを掛け合わせる、という作業を一気に行う。
sapply関数…要素ごとの処理
- sapply(X, FUN)
-
要素ごとに処理を行って、表matrixで答えを返す。
- X=ベクトル(vector)、表(matrix)など複数要素を含むデータ
- FUN=関数名ないし関数定義
条件付き集計
経費記録データを集計したい。
- 担当別
- 費目別
- 担当・費目別
それぞれに請求件数・合計額を算出する。
日付 | 担当 | 費目 | 金額 |
---|---|---|---|
5月6日 | 藤本 | 交通費 | 5300 |
5月6日 | 藤本 | 食費 | 2300 |
5月6日 | 藤本 | 消耗品費 | 1500 |
5月6日 | 松浦 | 交通費 | 2400 |
5月6日 | 松浦 | 消耗品費 | 850 |
5月7日 | 藤本 | 交通費 | 2000 |
5月7日 | 藤本 | 食費 | 2500 |
… |
一般的に条件に合うデータの摘出を行うやり方。
tapply関数…カテゴリー別集計
- tapply(X, INDEX, FUN)
-
要素をグループごとに処理する
- X=ベクトル(vector)、表(matrix)など複数要素を含むデータ
- INDEX=カテゴリー変数
- FUN=関数名ないし関数定義
クロス集計
table関数
- table(...)
-
水準ごとの度数を集計する
- カテゴリー変数
addmargins関数…表に合計欄を付加
- addmargins(X, MARGIN)
-
表matrixに合計欄を加える。
- X=表(matrix)データ
- MARGIN=全体(省略時)、行単位1、列単位2の合計を出力
比率
prop.table関数…比率計算
- prop.table(X, MARGIN)
-
表matrix内データの比率計算をする。
- X=表(matrix)データ
- MARGIN=全体(省略時)、行単位1、列単位2の比率を出力