我有两个载体
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"
答案 0 :(得分:4)
这应该有用。
按每个字符拆分所有向量,然后查找每个字符的频率(key.vec
)。接下来发现目标向量(vec2
)中是否存在每个字符的相同频率。这将有助于处理这两种模式。
vec2[lapply(strsplit(vec2, ""), table) %in% lapply(strsplit(key.vec, ""), table)]
#[1] "ball:apple" "cat:ball" "ball:cat" "apple:ball"
答案 1 :(得分:3)
您可以使用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))]
\\1
和\\2
被称为反向引用。他们匹配第一/第二正则表达组。因此(.*):(.*)
匹配字符串如下:(apple):(ball)
。因此\\2:\\1
变为\\2=ball:\\1=apple
。有关详细信息,请参阅:http://www.regular-expressions.info/backref.html