我到处都找过,但找不到这个问题的答案。我正在尝试访问 R 在将字符串向量更改为因子向量时使用的因子查找表。我并不是试图将字符串转换为因子,而是获取因子变量底层的查找表并将其存储为哈希表以供在其他地方使用。
我遇到了这个问题,因为我想在不同长度向量的列表上使用这个因子查找表,将它们从字符串转换为数字。
即,我有一个项目集列表,我想将其转换为数字,但列表中的每个集都有不同数量的项目。
到目前为止,我已经将向量列表转换为向量了
vec <- unlist(list)
vec <- factor(vec)
现在我想使用因子查找表对原始列表进行查找,该因子查找表必须是底层 vec,但我似乎找不到它。
vec <- c('a','b','c','b','a')
f <- factor(vec)
f
#> [1] a b c b a
#> Levels: a b c
indx <- (f)
attributes(indx) <- NULL
indx
#> [1] 1 2 3 2 1
或者您希望内部使用哈希表来创建因子变量。不幸的是,在创建因子的过程中创建的任何哈希表都将由函数
unique
和
match
创建,它们是内部函数,因此您将无法访问这些函数创建的任何内容(除了返回值)当然)。如果您想要一个哈希表,以便可以使用它来索引与现有因子具有相同级别的字符向量,只需创建一个哈希表,如下所示:
library(hash)
.levels <- levels(f)
h <- hash(keys = .levels,values = seq_along(.levels))
newVec <- sample(.levels,10,replace=T)
newVec
#> [1] "a" "b" "a" "a" "a" "c" "c" "b" "c" "a"
values(h,keys = newVec)
#> a b a a a c c b c a
#> 1 2 1 1 1 3 3 2 3 1
您可以使用
as.integer()
获取因子的数值,使用
as.character()
获取字符值。如果您想要哈希表,只需在从因子中获取唯一值后使用
as.integer
和
as.character
即可,如下所示:
> vec <- c('a','b','c','b','a')
> f <- factor(vec)
> f
[1] a b c b a
Levels: a b c
> unique_f <- unique(f)
> f_values <- as.integer(unique_f)
> names(f_values) <- as.character(unique_f)
> f_values
a b c
1 2 3
单行版本可以使用 structure()
函数:
> structure(as.integer(unique(f)), names = as.character(unique(f)))
a b c
1 2 3
但是如果您不熟悉structure()
,那么这不是特别可读。