匹配R中表达式的2个向量
样本数据匹配R中表达式的2个向量,r,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)) 看起来%中的运算符%就是您要查找的: vector2$num[vector2$name2 %in% vector1$na
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))
看起来%中的运算符
%就是您要查找的:
vector2$num[vector2$name2 %in% vector1$name1]
这有用吗
编辑
%
中的%和匹配
并不完全相似。从“帮助”页面:
match返回其属性的(第一个)匹配的位置向量
第一个论点在第二个论点中
%在%中,作为二进制运算符,它是一个更直观的界面,返回
一种逻辑向量,指示其左边是否匹配
操作数
因此,match
将不会返回所有匹配项,而只返回第一个匹配项,而%
中的%将适用于所有匹配项
编辑2
下面是一个简单的例子,说明了%
中的match
和%之间的区别,使用了一个稍加修改的示例,该示例应返回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
>vector1 vector2 vector2$num[vector2$name2%in%vector1$name1]
[1] 3 5
>vector2$num[匹配(vector1$name1,vector2$name2)]
[1] 钠3钠
就这么做吧
vector1 <- merge(vector1, vector2, by.x = "name1", by.y = "name2", all.x = T)
vector1我已经尝试过这种方法,它漏掉了一些字符。你能提供一个失败应用程序的可复制示例吗?你应该给出一个它漏掉一些字符的示例。您也在匹配字符串,对吗?@Max:问题可能是match
不匹配多个匹配项(请参见编辑后的答案)。至少这是我们两种方法之间的区别。这是否解决了您的问题?您可能应该转换为字符
,因为原始数据是因子
(1)这些是数据帧,而不是向量。(2) 当将它们放入数据帧中时,它们被强制使用因子。它们是矢量还是数据帧?如果不是因子级别,我建议使用stringsAsFactors=FALSE
。你完全正确!谢谢,你说得对!我没想过这样做,谢谢。
> 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
vector1 <- merge(vector1, vector2, by.x = "name1", by.y = "name2", all.x = T)