2017-02-25 49 views
-1

在試圖運行lm()時,R返回了小於2級的因子的錯誤。下面是一個簡短的表格,其中列出了類型,以及「等級」的3個度量。來自unique()和nlevels()的輸出不匹配

爲什麼length(unique(x[,i]))不能提供與nlevels(x[,i])相同的輸出?

levels

+1

你可以有比唯一值以上的水平......看'X =因子(c(「a」,「b」),levels = c(「a」,「b」,「c」)))。一種可能發生的方式是通過對數據進行子集化。 'd1 = data.frame(x = letters [1:4]); d2 = d1 [d1 $ x%in%c(「a」,「b」),,drop = FALSE]; str(d2 $ x)'。 'droplevels'是一個有用的功能 – user20650

回答

1

一個可能的原因是,NA算作獨特的價值,但在因素不是一個級別:

> a <- as.factor(c("A","B","A",NA)) 
> unique(a) 
[1] A B <NA> 
Levels: A B 
> length(unique(a)) 
[1] 3 
> levels(a) 
[1] "A" "B" 
> nlevels(a) 
[1] 2 
+0

這是一個有價值的提示,但只會計入識別1級。在我的第四個因素中,我有10個獨特的值,nlevels = 0。 – braxtonlewis

+0

@braxtonlewis,你可能注意到那些'nlevels()= 0'記錄都是整數或數字。這是因爲'unique'可以應用於所有類型,但'nlevels'只能應用於'factor'。 –