lecture
website icon
次數分配
次數分配 集中趨勢 分散趨勢 交叉表
×
website icon 資料管理 統計分析 相關資源 巨人肩膀 語法索引 關於作者

簡介

本部分介紹如何呼叫次數分配表,使用到的函數包含:

次數分配表通常是描述統計的第一個步驟,它能顯示資料分布的概況,同時也經常被用來檢查資料有無異常。次數分配表計算的是類別變數出現的個數,如果是連續變數就不適合使用次數分配表,應該從後續要介紹的集中與分散趨勢來掌握資料概況。

這裡持續以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

distribution chart for gender

也可以透過 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可以直接以瀏覽器開啟。