如何匹配R中两个向量的倒序
我有两个向量如何匹配R中两个向量的倒序,r,pattern-matching,R,Pattern Matching,我有两个向量 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[lapply(strsplit(vec2, ""), ta
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[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]
为什么?
\\1
和\\2
称为反向参考。它们与第一/第二正则表达式组匹配。因此,(.*):(.*)
匹配字符串如下:(apple):(ball)
。所以\\2:\\1
变成\\2=ball:\\1=apple
。有关更多信息,请参阅:这是一个非常好的方法。Thanks@Ronak这个问题解决了吗?请接受回答,如果未解决,请澄清?
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))]