相关疑难解决方法(0)

R矢量与有序索引匹配

这里我有两个字符串向量,其顺序很重要,无法更改.

vec1 <- c("carrot","carrot","carrot","apple","apple","mango","mango","cherry","cherry")
vec2 <- c("cherry","apple")
Run Code Online (Sandbox Code Playgroud)

我想知道vec2中的元素是否出现在vec1中,如果是,则在哪里(索引/位置)以及以什么顺序出现.

我试过which(vec1 %in% vec2)4 5 8 9.这些是正确的索引,但顺序错误.我试过match(vec2,vec1)8 4.仅返回第一个匹配项.如果vec1是唯一的,这将有效.

理想情况下,我正在寻找这个结果:8 9 4 5.樱桃首先在8号和9号匹配,然后苹果在4号和5号匹配.

有没有一种聪明的方法来做到这一点,而不诉诸循环?

r

6
推荐指数
1
解决办法
625
查看次数

如何找到2个向量之间的精确匹配?

我需要找到2个向量之间的匹配:

y=c("13AD10","13AD11","13AD12","13AD13","13AD14","13AD16","13AD17","13AD19","13AD1","13AD20","13AD21","13AD24","13AD25","13AD2","13AD3","13AD5","13AD6","13AD7","13AD8","13AD9","13HD10","13HD11","13HD12","13HD14","13HD5","13HD7")
to_find=c("13AD1","13AD3","13AD7","13AD13","13AD20")
Run Code Online (Sandbox Code Playgroud)

根据我在本网站上发现的内容,我试过了

select=grep(paste(to_find,collapse="|"),y)
Run Code Online (Sandbox Code Playgroud)

返回太多条目(以13AD1开头的所有内容都存在)

[1]  1  2  3  4  5  6  7  8  9 10 15 18
Run Code Online (Sandbox Code Playgroud)

我试过了

select=which(y==to_find)
Run Code Online (Sandbox Code Playgroud)

但并非所有条目都包括在内

[1]  4 10 18
Run Code Online (Sandbox Code Playgroud)

的确,我明白了

y==to_find
[1] FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE
[21] FALSE FALSE FALSE FALSE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)

尽管事实如此

to_find[1]==y[9]

[1] TRUE
Run Code Online (Sandbox Code Playgroud)

我很困惑,为什么我得到y == to_find和to_find 1 == y [9]的不同结果?关于如何获得我的向量之间的完全匹配的任何想法?谢谢你的帮助.

PS:问题部分回答在R中匹配两个向量但该帖子不包括关于grep和==的解释

r

2
推荐指数
1
解决办法
1331
查看次数

标签 统计

r ×2