如何在R中匹配两个向量的逆序



我有两个向量

key.vec <- c("apple:ball", "ball:cat","dog:ear")
vec2 <- c("ball:apple","cat:cat","cat:ball","ball:cat","apple:ball")

我现在想使用key.vecvec2中查找项目,并获取由:分隔的项目,而不管它们的顺序如何。

因此,如果我尝试这样的vec2[match(key.vec,vec2)]:,结果应该如下所示

结果:

"apple:ball", "ball:cat", "ball:apple","cat:ball"

这应该可以工作。

将所有向量按每个字符进行拆分,然后找到每个字符的频率(key.vec(。下一步查找目标向量(vec2(中是否存在每个字符的相同频率。这将有助于处理这两种模式。

vec2[lapply(strsplit(vec2, ""), table) %in% lapply(strsplit(key.vec, ""), table)]
#[1] "ball:apple" "cat:ball"   "ball:cat"   "apple:ball"

您可以按如下方式使用sub

full.key.vec <- c(key.vec, sub("(.*):(.*)", "\2:\1", key.vec))
ind <- vec2 %in% full.key.vec
vec2[ind]

或者在一行中:

vec2[vec2 %in% c(key.vec, sub("(.*):(.*)", "\2:\1", key.vec))]

为什么

CCD_ 8和CCD_。它们与第1/2正则表达式组匹配。因此(.*):(.*)匹配字符串如下:(apple):(ball)。因此CCD_ 12变为CCD_。有关更多信息,请参阅:http://www.regular-expressions.info/backref.html