[英]How to match reverse order of two vectors in R
我有两个向量
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))]
\\\\1
和\\\\2
是所谓的反向引用。 他们匹配第一/第二正则表达组。 所以(.*):(.*)
匹配字符串如下: (apple):(ball)
。 所以\\\\2:\\\\1
变为\\\\2=ball:\\\\1=apple
。 有关更多信息,请参阅: http : //www.regular-expressions.info/backref.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.