繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM