2016-03-15 100 views
2

我想获取字符串中每个字母的字母表中的相对位置。为了证明事情不正常:将字母转换为字母表中的相对位置(R)

which(letters %in% unlist(strsplit("acba", split=""))) 

结果:

#[1] 1 2 3 

我正在寻找一个代码片段返回:

#[1] 1 3 2 1 

建议?

回答

5

如果我们需要替换数字字符串元素,chartr可用于

chartr('abc', '123', 'acba') 
#[1] "1321" 

或者做strsplit/unlist后,我们就可以matchletters得到数字索引。

match(unlist(strsplit("acba", split="")), letters) 
#[1] 1 3 2 1 

在OP的代码,当我们使用%in%它给即

letters %in% unlist(strsplit("acba", split="")) 
#[1] TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 

逻辑输出正如我们可以从输出理解,只有在letters匹配与所述第一3种元素输出为unlist。因此,与which包装会给即1该序列的只有数字指标,2,3,但是,如果我们使用即

unlist(strsplit("acba", split="")) %in% letters 
#[1] TRUE TRUE TRUE TRUE 

和反向然后用which包,它会显示1,2,3, 4.