当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何找到2个向量之间的精确匹配?》经验,为你挑选了1个好方法。

我需要找到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")

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

select=grep(paste(to_find,collapse="|"),y)

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

[1]  1  2  3  4  5  6  7  8  9 10 15 18

我试过了

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 1 == y [9]的不同结果?关于如何获得我的向量之间的完全匹配的任何想法?谢谢你的帮助.

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



1> stas g..:

怎么样:

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

to_find[to_find %in% y]
# [1] "13AD1"  "13AD3"  "13AD7"  "13AD13" "13AD20"

grep(paste(to_find,collapse="|"),y)给你"太多"答案,因为例如13AD1会得到匹配,13AD10因为前者在后者中是完全特征的.

which(y==to_find)给你"太少"的答案,因为它查看成对相等(并且向量to_find被循环以匹配长度y),因此i仅在返回时返回to_find[i] == y[i].

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有