R中的系数级别不显示为数字

R中的系数级别不显示为数字,r,r-factor,R,R Factor,我有一个data.frame,有200万行。其中一列是字母数字标识,该标识在该列中重复,唯一计数为300000 >head(df$ID) ID AB00153232de AB00153232de AB00153232de AB00155532gh AB00155532gh AB00158932ij >df$ID<-factor(df$ID) 因子是否未存储为数值向量?为什么 改用作为.integer(df$ID) 例如: R> ex <

我有一个data.frame,有200万行。其中一列是字母数字标识,该标识在该列中重复,唯一计数为300000

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

>df$ID<-factor(df$ID)
因子是否未存储为数值向量?为什么

改用
作为.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> 
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
级别: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)
系数w/26“A”、“B”、“C”、“D”等级别:1 2 3 4 5 6 7 8 9 10。。。
R> as.整数(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>

对因子变量使用
取消分类
。它将因子级别保留为新变量的属性,以便将来需要时可以使用它

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")

df1我可以将这些级别用作向量或数组中的索引吗?如果在执行
unclass
后只需要这些级别,请尝试以下操作:
属性(unclass(df1$ID))$levels
我有一个data.frame,其中包含两个这样的因子变量,我正在从中创建二维数组(矩阵)。我的问题是,如果我试图访问矩阵元素M[“factor1”,“factor2”],它会在内部通过数字级别进行搜索,还是通过字符值进行搜索?在第二种情况下,作为优化步骤,我可能需要编写额外的逻辑来搜索数值。是的,在引擎盖下,因子变量被视为整数,级别被用作标签。这些级别可用于子集矩阵或数据帧。
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")