在这里,我有两个字符串向量,它们的顺序很重要,无法更改。
vec1 <- c("carrot","carrot","carrot","apple","apple","mango","mango","cherry","cherry")
vec2 <- c("cherry","apple")
我希望找出vec2中的元素是否出现在vec1中,如果出现,则在哪里(索引/位置)以及以什么顺序出现。
我尝试了
which(vec1 %in% vec2)
,它给出了4 5 8 9
。这些是正确的索引,但是顺序错误。我尝试了match(vec2,vec1)
,它给出了8 4
。仅返回第一个匹配项。如果vec1是唯一的,这将起作用。理想情况下,我正在寻找以下结果:
8 9 4 5
。樱桃首先在pos 8和9匹配,然后苹果在4和5匹配。
有没有一种聪明的方法可以做到这一点而不求助于循环?
最佳答案
你可以试试这个
unlist(lapply(vec2, function(x) which(vec1 %in% x)))
[1] 8 9 4 5
这将依次返回vec2中存在的vec1中的元素。
关于r - R向量-向量与有序索引匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30101300/