示例数据
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
答案 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%
之间区别的简单说明,使用稍微修改过的示例,该示例应返回3
和5
:
> 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