1. 程式人生 > >R語言之因子(factor)

R語言之因子(factor)

        變數可歸結為名義型、有序型或連續型變數。名義型變數是沒有順序之分的類別變數,如型別、種類;有序型變量表示一種順序關係,而非數量關係,如偏好、ID;連續型變數可以呈現為某個範圍內的任意值,並同時表示了順序和數量,如年齡、成績。

        類別(名義型)變數和有序類別(有序型)變數在R中稱為因子(factor) 。因子在R中非常重要,因為它決定了資料的分析方式以及如何進行視覺呈現。

        函式 factor() 以一個整數向量的形式儲存類別值,整數的取值範圍是[1... k ](其中k 是名義型變數中唯一值的個數) ,同時一個由字串(原始值)組成的內部向量將對映到這些整數上。

       對於 類別(名義型)變數,舉例——建立向量:diabetes <- c("Type1","Type2","Type1","Type1")。語句diabetes <- factor(diabetes)將此向量儲存為(1,2,1,1),並在內部將其關聯為1 = Type1和2 = Type2(具體賦值根據字母順序而定)。

       對於有序類別(有序型)變數,需要為函式 factor() 指定引數 ordered=TRUE。給定向量status <- c("Poor","Improve","Excellent","Poor"),語句 status <- factor(status, ordered=TRUE) 會將向量編碼為(3, 2, 1, 3),並在內部將這些值關聯為1= Excellent 、2= Improved 以及3= Poor 。

       對於字元型向量,因子的水平預設依字母順序建立。這對於因子 status 是有意義的,因為“Excellent” 、 “Improved” 、 “Poor”的排序方式恰好與邏輯順序相一致。如果“Poor”被編碼為“Ailing” ,會有問題,因為順序將為“Ailing” 、 “Excellent” 、 “Improved” 。如果理想中的順序是“Poor” 、 “Improved” 、 “Excellent” ,則會出現類似的問題。按預設的字母順序排序的因子很少能夠讓人滿意。因此,可以指定levels選項來覆蓋預設排序,如status <- factor(status,order = TRUE,levels = c("Poor","Improves","Excellent"))。各水平的賦值將為1= Poor 、2= Improved 、3= Excellent 。(請保證指定的水平與資料中的真實值相匹配,因為任何在資料中出現而未在引數中列舉的資料都將被設為缺失值。)

       程式碼清單2-6演示了普通因子和有序因子的不同是如何影響資料分析的。

       

       首先,以向量的形式輸入了資料1 。然後,將 diabetes 和 status 分別指定為一個普通因子和一個有序型因子。 最後, 將資料合併為一個數據框。 函式 str(object) 可提供R中某個物件 (本例中為資料框)的資訊 2。它清楚地顯示 diabetes 是一個因子,而 status 是一個有序型因子,以及此資料框在內部是如何進行編碼的。注意,函式 summary() 會區別對待各個變數3 。它顯示了連續型變數 age 的最小值、最大值、均值和各四分位數,並顯示了類別型變數 diabetes 和status (各水平)的頻數值