因素

因子是在 R 中表示分類變數的一種方法。給定一個向量 x,其值可以使用 as.character() 轉換為字元,factor()as.factor() 的預設引數為向量的每個不同元素分配一個整數,以及一個級別屬性和一個標籤屬性。級別是 x 可能採用的值,標籤可以是給定元素,也可以由使用者確定。

為了說明因子是如何工作的,我們將建立一個具有預設屬性,自定義級別,自定義級別和標籤的因子。

# standard
factor(c(1,1,2,2,3,3))
[1] 1 1 2 2 3 3
Levels: 1 2 3

當使用者知道因子可以採用的可能值的數量大於向量中的當前值時,可以出現例項。為此我們自己在 factor() 中分配關卡。

factor(c(1,1,2,2,3,3),
         levels = c(1,2,3,4,5))
[1] 1 1 2 2 3 3
Levels: 1 2 3 4 5

出於樣式目的,使用者可能希望為每個級別分配標籤。預設情況下,標籤是級別的字元表示形式。在這裡,我們為因子中的每個可能級別分配標籤。

factor(c(1,1,2,2,3,3),
       levels = c(1,2,3,4,5),
       labels = c("Fox","Dog","Cow","Brick","Dolphin"))
[1] Fox Fox Dog Dog Cow Cow
Levels: Fox Dog Cow Brick Dolphin

通常情況下,只能使用 ==!= 比較因子,如果因子具有相同的水平。由於因子具有不同的因子水平,因此以下因素的比較失敗,即使它們看起來相等。

factor(c(1,1,2,2,3,3),levels = c(1,2,3)) == factor(c(1,1,2,2,3,3),levels = c(1,2,3,4,5))
Error in Ops.factor(factor(c(1, 1, 2, 2, 3, 3), levels = c(1, 2, 3)),  : 
  level sets of factors are different

這是有道理的,因為 RHS 中的額外水平意味著 R 沒有足夠的關於每個因子的資訊來以有意義的方式比較它們。

運算子 <<=>>= 僅適用於有序因子。這些可以表示仍然具有線性順序的分類值。可以通過向 factor 函式提供 ordered = TRUE 引數或僅使用 ordered 函式來建立有序因子。

x <- factor(1:3, labels = c('low', 'medium', 'high'), ordered = TRUE)
print(x)
[1] low    medium high  
Levels: low < medium < high

y <- ordered(3:1, labels = c('low', 'medium', 'high'))
print(y)
[1] high   medium low   
Levels: low < medium < high

x < y
[1]  TRUE FALSE FALSE

有關更多資訊,請參閱 Factor 文件