Rで『身近な統計(’12)』 – 図表2-4 度数分布表

第2章の巻末の度数分布表に似た内容のデータフレームを作ってみました。内容は以下の通りです。日本語では、環境によって、正しく表示されない場合もありますので、アルファベットにしています。

作りたいテーブル
grade freq cum_freq rel_freq cum_rel_freq
A 10 10 0.25 0.25
B 16 26 0.40 0.65
C 10 36 0.25 0.90
D 4 40 0.10 1.00
ソース

変数に値を代入して、計算し、いくつかの方法で、データフレームに追加しているだけです。このデータは次回にも使うので、最期にファイルに保存しています。

実行結果

freq_tableの中身を確認してみます。以下のように表示されます。

> freq_table
  grade freq cum_freq rel_freq cum_rel_freq
1     A   10       10     0.25         0.25
2     B   16       26     0.40         0.65
3     C   10       36     0.25         0.90
4     D    4       40     0.10         1.00

説明

動作や変数の内容の変化を確認したい方は、環境のペインに表示されている変数を全て消去してから、ソースエディタ上の[Run]で、1行ずつ実行してみてください。

4行目,5行目
grade <- c("A", "B", "C", "D")         # 成績
freq <- c(10, 16, 10, 4)               # 度数

ここでは、変数に値を入れています。Rでの代入は”<-“です。”=“も使えますが、関数のオプションとの区別するために、”<-“とすることが推奨されています。
c(...)は、複数の要素(要素が数値なら「複数の数値」、文字なら「複数の文字」)をまとめて、ベクトルにする関数です。
#“以後はコメントです。関数の実行などには影響しません。後で自分が見たり、他の人が見たりしたときに、何をしているのかがわかるように入れます。

7行目
freq_table <- data.frame(grade, freq)  # データフレームにします。

次に、data.frame(...)で、2つのベクトルをまとめて、データフレームを作り、freq_tableに代入します。データフレームとは、Rでよく使われるデータ構造で、異なる型のデータを一つにまとめたものです。2次元配列のようですが、特別なリストです。

ここでは、freq_tableの内容は以下のようになっています。左側に行番号がつき、変数名が列の名前になっていることが確認できます。

> freq_table
  grade freq
1     A   10
2     B   16
3     C   10
4     D    4

この後さらに、複数の方法で、データフレームに列を追加していきます。

10行目
freq_table <- transform(freq_table, cum_freq = cumsum(freq))  # 累積度数を追加

transform(x, y = value)は、データフレームに列を追加したり、既にある列のデータを変更したりする関数です。xに指定した名前yがあれば、y列をvalueに入れ替え、名前yがなければy列を追加し、valueとします。

> transform(freq_table, grade = 1:4)             # gradeの"A"~"D"を1~4に入れ替え
  grade freq
1     1   10
2     2   16
3     3   10
4     4    4
> transform(freq_table, mijika = seq(2, 8, 2))    # mijikaという名前の列を追加
  grade freq mijika
1     1   10      2
2     2   16      4
3     3   10      6
4     4    4      8

cumsum(x)は、xの累積和を返します。

> cumsum(1:10)
 [1]  1  3  6 10 15 21 28 36 45 55
11行目
freq_table <- cbind(freq_table, rel_freq = freq / sum(freq))  # 相対度数を追加

cbind(x, y) または cbind(x, y = value)は列方向(横方向)にxyを結合します。cbind(x, y)yが列の名前になります。cbind(x, y = value)では名前y、値valueの列が追加されます。

rel_freq <- freq / sum(freq)
freq_table <- cbind(freq_table, rel_freq)

としても結果は同じになります。
sum(x)は、和を返します。

> sum(1:10)
 [1]  55
12行目
freq_table$cum_rel_freq <- freq_table$cum_freq / sum(freq)    # 累積相対度数を追加

x$yで、データフレームxy列を操作できます。データフレームxが存在していて、その中にy列が存在していない場合に、x$yに代入すると、y列が追加されて代入されます。ただし、データフレームxがない場合には、エラーになります。

> x$y <- 1:4
 x$y <- 1:4 でエラー:  オブジェクト 'x' がありません 
> x <- data.frame(a = 1:4)
> x$y <- rep(0.1, 4)
> x
  a   y
1 1 0.1
2 2 0.1
3 3 0.1
4 4 0.1
> x$a
[1] 1 2 3 4
> x$y
[1] 0.1 0.1 0.1 0.1
14行目
write.csv(freq_table, "chapter02_4.csv", row.names = FALSE)   # テーブルを保存

データはこの後も使うので、保存しておきます。row.names = FALSEで、左側の行番号を保存しないように指定しています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です