Rで度数分布表を作る
まずは今回のサンプル用として、身長っぽいデータを作ってみます。
このaに対して、度数分布表を作りたい。
質的データ(カテゴリカルデータ)なら、table関数を使って度数を集計できるのですが、量的データに対してtableを使うと、↓こんな感じになってしまいます。
量的データだとうまくいかないですね。
Rには、お馴染みhist関数があるんで、ヒストグラムは簡単に描けます。
実は、このhist関数の戻り値のオブジェクトに各階級の度数が入っているんです。知ってました?
breaksが階級を区切る値で、countsが度数ですね。
つまり、155~160の範囲の度数が1、160~165の範囲の度数が7、・・・のような意味です。
細かく言うと、境目のところは
155 < 階級に含まれる値 ≦ 160
のように扱われています。
これらの値を使えば、度数分布表が作れそうです。
前置きが長くなりましたが、↓こんな感じでどうでしょう?
データフレームの形で度数分布表ができました。
階級の取り方を指定したいときには、hist関数を呼ぶときにbreaksオプションで指定すればOKです。↓こんな感じ。
データフレームの形になってしまえば、あとは好きなように使えますよね。
このaに対して、度数分布表を作りたい。
質的データ(カテゴリカルデータ)なら、table関数を使って度数を集計できるのですが、量的データに対してtableを使うと、↓こんな感じになってしまいます。
table(a) a 162.4 162.7 163.4 163.8 164.2 164.6 166 166.3 166.5 167.1 1 1 1 1 2 1 1 1 1 1 167.3 168 168.1 168.5 168.6 168.7 169 170 170.1 170.2 1 1 1 1 1 1 1 1 1 1 170.6 170.7 170.8 171.1 172.6 173 173.3 175.7 177 1 1 1 1 1 1 1 1 1
量的データだとうまくいかないですね。
Rには、お馴染みhist関数があるんで、ヒストグラムは簡単に描けます。
hist(a)
実は、このhist関数の戻り値のオブジェクトに各階級の度数が入っているんです。知ってました?
h <- hist(a) h $breaks [1] 162 164 166 168 170 172 174 176 178 $counts [1] 4 4 5 6 6 3 1 1 $density [1] 0.06666667 0.06666667 0.08333333 0.10000000 0.10000000 [6] 0.05000000 0.01666667 0.01666667 $mids [1] 163 165 167 169 171 173 175 177 $xname [1] "a" $equidist [1] TRUE attr(,"class") [1] "histogram"
breaksが階級を区切る値で、countsが度数ですね。
つまり、155~160の範囲の度数が1、160~165の範囲の度数が7、・・・のような意味です。
細かく言うと、境目のところは
155 < 階級に含まれる値 ≦ 160
のように扱われています。
これらの値を使えば、度数分布表が作れそうです。
前置きが長くなりましたが、↓こんな感じでどうでしょう?
h <- hist(a) n <- length(h$counts) # 階級の数 class_names <- NULL # 階級の名前格納用 for(i in 1:n) { class_names[i] <- paste(h$breaks[i], "~", h$breaks[i+1]) } frequency_table <- data.frame(class=class_names, frequency=h$counts) frequency_table class frequency 1 162 ~ 164 4 2 164 ~ 166 4 3 166 ~ 168 5 4 168 ~ 170 6 5 170 ~ 172 6 6 172 ~ 174 3 7 174 ~ 176 1 8 176 ~ 178 1
データフレームの形で度数分布表ができました。
階級の取り方を指定したいときには、hist関数を呼ぶときにbreaksオプションで指定すればOKです。↓こんな感じ。
データフレームの形になってしまえば、あとは好きなように使えますよね。
コメント
コメントを投稿