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

R 如何找到两个向量之间的精确匹配?,r,R,我需要找到两个向量之间的匹配: 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_fi

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

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")
根据我在这个网站上的发现,我试着

select=grep(paste(to_find,collapse="|"),y)
返回的条目太多(所有以13AD1开头的条目都存在)

我试过了

select=which(y==to_find)
但并非所有条目都包括在内

[1]  4 10 18
事实上,我明白了

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
尽管事实上,例如

to_find[1]==y[9]

[1] TRUE
我很困惑,为什么y==to_-find和to_-find==y[9]会得到不同的结果?知道如何得到向量之间的精确匹配吗?谢谢你的帮助

附言:这个问题在那里得到了部分回答,但那篇文章没有包括关于grep和==

的解释,那么:

to_find %in% y
# [1] TRUE TRUE TRUE TRUE TRUE

to_find[to_find %in% y]
# [1] "13AD1"  "13AD3"  "13AD7"  "13AD13" "13AD20"
grep(粘贴(to_find,collapse=“|”),
会给你“太多”的答案,因为例如
13AD1
会与
13AD10
匹配,因为后者完全以前者为特色


其中(y==to\u find)
给出的答案“太少”,因为它考虑了两两相等(并且向量
to\u find
被循环以匹配
y
的长度),因此只有当
to\u find[i]==y[i]时才会返回
i

这将为您提供要在
y
中查找的
元素的索引:

> match(to_find, y)
[1]  9 15 18  4 10

> match(c(to_find, "hallo"), y)
[1]  9 15 18  4 10 NA
您可以对结果进行排序:

> sort(match(c(to_find, "hallo"), y))
[1]  4  9 10 15 18

谢谢你的回答。实际上,这并不完全有效。我需要“y”中“to_find”的位置。答案应该是[1]49101518@matarit你的问题不清楚。那么jogo在下面的回答会给你确切的答案。然而,我对您的方法不起作用的原因的解释仍然站不住脚,感谢@stas g的解释。@Matarit没问题:)使用这种方法,无法立即明确哪个索引对应于要查找的
中的哪个值(当然,除非OP不在乎)<代码>匹配(要查找,y)
下面是一个更好的选项ithink@stasg你是对的
> sort(match(c(to_find, "hallo"), y))
[1]  4  9 10 15 18
which(y %in% to_find)
# [1]  4  9 10 15 18
which(to_find %in% y)
# [1] 1 2 3 4 5