匹配R中表达式的2个向量

时间:2014-05-03 18:55:02

标签: r

示例数据

vector1 <- data.frame(name1=c("amsterdam, i.o.","jiřom e.g.", "higgins dec e.o.")) 
vector2 <- data.frame(name2=c("hello no e.y.","jiřom e.g.","oxford road w.o.o"),num=c(2,3,4))

我试过这种方法,但它在一些表达式上失败了。什么是防弹解决方案?正则表达式解决方案会解决吗?

 vector1$vec1 <- vector2$num[match(vector1$name1,vector2$name2)]

以上是在这种情况下工作,并且波纹管结果是期望的结果。

              name1  vec1
 1  amsterdam, i.o.   NA
 2       jiřom e.g.    3
 3 higgins dec e.o.   NA

2 个答案:

答案 0 :(得分:2)

只做

vector1 <- merge(vector1, vector2, by.x = "name1", by.y = "name2", all.x = T)

答案 1 :(得分:0)

看起来您正在寻找运营商%in%

vector2$num[vector2$name2 %in% vector1$name1]

这有帮助吗?

修改

%in%match并不完全相似。从帮助页面:

  

匹配返回其(第一)匹配位置的向量   第二个论点。

     

%in%是一个更直观的界面,作为二元运算符,返回   一个逻辑向量,指示其左侧是否匹配   操作数。

因此,match不会返回所有匹配项,只返回第一项匹配项,而%in%将适用于所有匹配项。

编辑2

以下是match%in%之间区别的简单说明,使用稍微修改过的示例,该示例应返回35

> vector1 <- data.frame(name1=c("amsterdam, i.o.","jiřom e.g.", "higgins dec e.o.")) 
> vector2 <- data.frame(name2=c("hello no e.y.","jiřom e.g.","jiřom e.g.","oxford road w.o.o"),num=c(2,3,5,4))
> vector2$num[vector2$name2 %in% vector1$name1]
[1] 3 5
> vector2$num[match(vector1$name1,vector2$name2)]
[1] NA  3 NA