Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
匹配R中表达式的2个向量_R - Fatal编程技术网

匹配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)