2017-02-09 63 views
1

我有一個200萬行的data.frame。其中一列是一個字母數字標識,在該列中重複出現,其唯一計數爲300000?R中的因子級別不顯示爲數字

>head(df$ID) 
    ID 
AB00153232de 
AB00153232de  
AB00153232de 
AB00155532gh 
AB00155532gh 
AB00158932ij 

>df$ID<-factor(df$ID) 

當我嘗試打印因子變量我得到的是這樣的:

>df$ID 
[1] AB00153232de AB00153232de AB00153232de AB00155532gh AB00155532gh AB00158932ij 
320668 Levels: AB00153232de AB00155532gh AB00158932ij..... 

不被存儲爲數字向量,爲什麼因素是什麼?

回答

1

在因子變量使用unclass。它將因素級別保留爲新變量的屬性,以便將來如果您需要,可以使用它。

df1$ID 
#  [1] AB00153232de AB00153232de AB00153232de AB00155532gh AB00155532gh AB00158932ij 
# Levels: AB00153232de AB00155532gh AB00158932ij 

unclass(df1$ID) 
# [1] 1 1 1 2 2 3 
# attr(,"levels") 
# [1] "AB00153232de" "AB00155532gh" "AB00158932ij" 

數據:

df1 <- structure(list(ID = structure(c(1L, 1L, 1L, 2L, 2L, 3L), 
            .Label = c("AB00153232de", "AB00155532gh", "AB00158932ij"), class = "factor")), 
       .Names = "ID", row.names = c(NA, -6L), class = "data.frame") 
+0

我可以用這些水平在向量或數組索引嗎? – TUSHAr

+0

如果你只想在執行'unclass'之後的級別,試試這個:'attributes(unclass(df1 $ ID))$ levels' – Sathish

+0

我有一個data.frame有兩個這樣的因子變量,我從中創建了一個二維數組(矩陣)。我的問題是,如果我嘗試訪問矩陣元素M [「factor1」,「factor2」],R將通過數字級別在內部搜索它,還是通過字符值進行搜索?在第二種情況下,我可能必須編寫額外的邏輯來搜索數值作爲優化步驟。 – TUSHAr

0

改爲使用as.integer(df$ID)

實施例:

R> ex <- as.factor(LETTERS) 
R> ex 
[1] A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 
Levels: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 
R> str(ex) 
Factor w/ 26 levels "A","B","C","D",..: 1 2 3 4 5 6 7 8 9 10 ... 
R> as.integer(ex) 
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 
R> 
相關問題