次數分配表通常是描述統計的第一個步驟,它能顯示資料分布的概況,同時也經常被用來檢查資料有無異常。次數分配表計算的是類別變數出現的個數,如果是連續變數就不適合使用次數分配表,應該從後續要介紹的集中與分散趨勢來掌握資料概況。
這裡持續以classroom.csv班級學生資料為例,來介紹如何產出次數分配表。
次數分配表-計數
table() 是 R 最常用於呼叫次數分配表的函數,函數預設會排除遺漏值。為了說明起見,我們仿造前例增加Alicia與Wu兩筆有遺漏值的個案,方便比較排除遺漏值前後的次數分配差異。
> classroom<-read.csv("C:/Users/USER//Downloads/classroom.csv", header=T, sep="")
> Alicia<-data.frame("Alicia", "F", 180, 999, 74) #增加Alicia,英文成績為遺漏值
> names(Alicia)<-c("name", "gender", "height", "english", "math") #命名Alicia的變數
> Wu<-data.frame("Wu", 999, 175, 68 ,75) #增加Wu,性別未知
> names(Wu)<-c("name", "gender", "height", "english", "math") #命名Wu的變數
> classroom<-rbind(classroom, Alicia, Wu) #將Alicia與Wu新增至classroom
> classroom$english[classroom$english==999]<-NA
> classroom$gender[classroom$gender==999]<-NA
> classroom
name gender height english math
1 Anne F 171 81 60
2 Ariel F 168 90 89
3 Bruce M 174 66 58
4 Emma F 160 73 82
5 George M 170 77 64
6 Kevin M 188 96 90
7 Lewis M 182 97 88
8 Linda F 158 61 48
9 Roger M 168 86 85
10 Sarah F 156 89 93
11 Alicia F 180 NA 74
12 Wu ‹NA› 175 68 75
直接以 table() 函數呼叫性別的次數分配表。useNA參數可以設定是否要顯示遺漏值,預設是不顯示;如果要顯示遺漏值個數,參數要設定useNA="ifany"。
> attach(classroom)
> table(gender, useNA="no") #不顯示遺漏值
gender
F M
6 5
> table(gender, useNA="ifany") #顯示遺漏值
gender
F M ‹NA›
6 5 1
table()雖然可以產出次數分配表,但閱讀起來並非熟悉的樣式; plyr 擴充套件裡的 count() 函數則改善了此問題:
> library(plyr)
> count(classroom, "gender")
gender freq
1 F 6
2 M 5
3 ‹NA› 1
次數分配表-百分比
要計算百分比,可以使用 prop.table() 函數將 table() 計算出來的次數改成小數形式。
> prop.table(table(class_new$gender, useNA="ifany"))
gender
F M ‹NA›
0.50000000 0.41666667 0.08333333
如果要容易閱讀,可將原式乘以100。
> prop.table(table(gender, useNA="ifany"))*100
gender
F M ‹NA›
50.000000 41.666667 8.333333
當然也可以用 plyr 套件裡的 count() 土法煉鋼直接計算:
> gender_fre<-count(classroom, "gender")
> gender_fre$freq/sum(gender_fre$freq)*100
[1] 50.000000 41.666667 8.333333
一個更簡單的方法是載入epiDisplay套件,利用tab1()產生次數分配表、百分比與長條圖:
> library(epiDisplay) #載入 epiDisplay
載入需要的套件:foreign
載入需要的套件:survival
載入需要的套件:MASS
載入需要的套件:nnet
> tab1(class_new$gender, cum.percent=TRUE)
classroom$gender :
Frequency %(NA+) cum.%(NA+) %(NA-) cum.%(NA-)
F 6 50.0 50.0 54.5 54.5
M 5 41.7 91.7 45.5 100.0
‹NA› 1 8.3 100.0 0.0 100.0
Total 12 100.0 100.0 100.0 100.0
也可以透過 frequency 套件中的 freq() 函數輸出類似像SPSS的次數分配表:
> library(frequency) #載入 frequency 套件
載入需要的套件:rmarkdow
載入需要的套件:knitr
載入需要的套件:DT
載入需要的套件:ggplot2
> freq(classroom$gender, file="c:/Users/USER/desktop/gender_fre.html", type="html") #輸出檔名為gender_fre.html的次數分配表
輸出的次數分配表gender_fre.html可以直接以瀏覽器開啟。