将名称列表转换为R中的整数标签
考虑以下列表将名称列表转换为R中的整数标签,r,R,考虑以下列表 names = c("Bob", "Steve", "John", "Steve") 我想要一个函数,为每个唯一的名称返回一个整数 int_names = [1,2,3,2] 还有一本字典,这样我就可以回去查名字了 dict_names = ["Bob", "Steve", "John"] 我可以看到如何使用for循环来实现这一点,但我确信在R中肯定有更有效的方法来实现这一点。我认为这可能与因子有关,但我似乎只能使用它来获得int\u名称,而失去dict\u名称您可以使用un
names = c("Bob", "Steve", "John", "Steve")
我想要一个函数,为每个唯一的名称返回一个整数
int_names = [1,2,3,2]
还有一本字典,这样我就可以回去查名字了
dict_names = ["Bob", "Steve", "John"]
我可以看到如何使用for循环来实现这一点,但我确信在R中肯定有更有效的方法来实现这一点。我认为这可能与
因子有关,但我似乎只能使用它来获得int\u名称
,而失去dict\u名称您可以使用unique
和match
dict_names <- unique(names)
int_names <- match(names, dict_names)
如果我理解正确,你可以通过给一个原子向量加上名字来得到它。不需要额外的功能
samplenames <- c("Bob", "Steve", "John","Steve")
thesenames <- unique(samplenames)
idx <- 1:length(thesenames)
names(idx) <- thesenames
idx["Steve"] # is 2
idx["John"] # is 3
名称我不理解您的解决方案。如果OP有set.seed(123);那么你需要一个额外的步骤,像这样。我不认为这是一个随机向量:set.seed(123);samplenames好吧,我不明白问题的这一方面,我认为双重“Steve”是一个编辑错误。不过这个想法仍然有效。你知道match是否使用哈希表来匹配match
函数吗?@MikeWise不,我不知道。
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"
names <- c("Bob", "Steve", "John", "Steve")
names.factor <- as.factor(names)
names.integer <- as.integer(names.factor)
names.dict <- unique(cbind(names.factor,names))