2014-06-20 15 views
1
vectorN = c("Hello","How","are","you","you","are","Hello") 
factorVectorN = factor(vectorN) 
#Value of levels(factorVectorN) is c("are", "Hello", "How", "you") 
all(levels(factorVectorN)[factorVectorN] == vectorN) # returns TRUE 

請問您能解釋一下,如何在上面的例子中級別(factorVectorN)[factorVectorN]創建與vectorN相同的向量?levels(factorObject)[factorObject]如何生成完整的向量?

回答

1

這只是基本子集。從help("[")

索引因素是允許的,等同於索引由 數字代碼(參見因素),而不是由作爲 印刷

你已經顯示因子水平的字符值。在內部,一個因素就是一個整數向量,其中每個數字(從1開始)對應於因子水平:

str(factorVectorN) 
#Factor w/ 4 levels "are","Hello",..: 2 3 1 4 4 1 2 
as.integer(factorVectorN) 
#[1] 2 3 1 4 4 1 2 

所以,如果你用這些數字子集的水平,你會得到一個特徵向量與同值的原始因素:

str(levels(factorVectorN)[factorVectorN]) 
#chr [1:7] "Hello" "How" "are" "you" "you" "are" "Hello" 

如果你原來的因素,使用==的因素將強制使用字符這個特徵向量比較,太。

1

levels(factorVectorN)是這意味着,它有3個條目和可以索引他們使用[]類型的長度爲3

class(levels(factorVectorN)) 
## [1] "character" 
length(levels(factorVectorN)) 
## [1] 3 

的原子矢量「字符」。

當您運行levels(factorVectorN)[factorVectorN]你基本上是告訴R鍵拉條目出levels(factorVectorN)匹配叫factorVectorN

現在指數向量,factorVectorN包含以下指標1 2 1 2 3 2。所以如果factorVectorN,然後第二個條目,然後再次第一個條目,然後第二個等,R將拉出第一個條目。這將返回1 2 1 2 3 2因爲這些是對應於指定索引向量levels(factorVectorN)的值