2017-02-09 21 views
1

私は200万行のdata.frameを持っています。カラムの1つは英数字のIdで、そのカラムで一意のカウントが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

2次元配列を作成する2つの因子変数を持つdata.frameがあります。 (マトリックス)。私の質問は、行列要素M ["factor1"、 "factor2"]にアクセスしようとすると、Rが内部的に数値レベルでそれを検索するのでしょうか、それとも文字値を使って検索しますか? 2番目のケースでは、最適化ステップとして数値を検索するためのロジックを追加する必要があります。 – 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>