我有两个向量
key.vec <- c("apple:ball", "ball:cat","dog:ear")
vec2 <- c("ball:apple","cat:cat","cat:ball","ball:cat","apple:ball")
我现在想使用key.vec
在vec2
中查找项目,并获取由:
分隔的项目,而不管它们的顺序如何。
因此,如果我尝试这样的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