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