因素
因子是在 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 文件 。