将名称列表转换为R中的整数标签

时间:2015-06-17 17:57:49

标签: r

考虑以下列表

names = c("Bob", "Steve", "John", "Steve")

我想要一个为每个唯一名称返回一个整数的函数

int_names = [1,2,3,2]

和一本字典,然后我可以回到名字

dict_names = ["Bob", "Steve", "John"]

我可以看到如何使用for循环执行此操作,但我确信在R中必须有更有效的方法来执行此操作。我认为它可能与factor有关但我似乎只是能够int_names使用此功能并丢失dict_names

3 个答案:

答案 0 :(得分:5)

您可以使用uniquematch

 dict_names <- unique(names)
 int_names <- match(names, dict_names)

factor指定levels为&#39; dict_names`

 int_names <- as.numeric(factor(names, levels=dict_names))

答案 1 :(得分:2)

如果我理解正确,你可以通过向原子向量添加名称来获得它。无需其他功能。

samplenames <- c("Bob", "Steve", "John","Steve")
thesenames <- unique(samplenames)
idx <- 1:length(thesenames)    
names(idx) <- thesenames

idx["Steve"]  # is 2
idx["John"]  # is 3

thesenames[1] # is "Bob"
thesenames[2] # is "Steve"

答案 2 :(得分:1)

names <- c("Bob", "Steve", "John", "Steve")
names.factor <- as.factor(names)
names.integer <- as.integer(names.factor)
names.dict <- unique(cbind(names.factor,names))