2014-01-21 32 views
0

我有两个二进制向量,我试图找到比较它们的最有效方式,它不仅仅基于标准“它们是否相等?”。R - 将两个向量与条件匹配

我的函数是,如果我有向量x和向量y我想找出向量x中有多少次我有一个1在相同的索引,向量y有一个0我还需要何时向量y有一个1 +有一个0,其中向量x也有一个0.(注意:如果我发现其中任何一个,我可以找到反向获得另一个,我只是不确定哪个更容易/更高效,即VectorY分数=长度(VectorX) - VectorX得分)

例:
向量x:1 1 1 0 0 1 - 得分:2
向量y:0 1 0 1 0 1 - 得分:4

我知道我可以使用af或循环遍历每个索引,但如果可能的话,我希望更高效的事情。我的矢量长度为100,我需要做很多这些比较,所以速度很重要。

我试图使用sum命令,但我无法弄清楚如何向它添加复杂的条件。我可以找到每个匹配的点,但这不足以解决这个问题。

例:

sum(vectorX == vectorY) 

回答

2

样品:

> vx 
[1] 1 1 1 0 0 1 
> vy 
[1] 0 1 0 1 0 1 

你说: “我多少次在向量x为1的相同指数在该向量y具有0”

> vx==1 & vy==0 # constructs this vector: 
[1] TRUE FALSE TRUE FALSE FALSE FALSE 
> sum(vx==1 & vy==0) # its sum is the answer (TRUE=1, FALSE=0) 
[1] 2 

你还说过:“当向量y有1 +有0时,向量x也有0”这我不明白,但你可以澄清,p根据我刚刚给你的答案,可以自己解决问题。

+0

完美,谢谢。我想我正朝着正确的方向前进,并没有把它们合并成一个向量。 至于第二部分,我对不好的解释表示歉意,我不太清楚要如何格式化它。但是我需要做的只是vyScore = vxScore - 长度(vx),所以这是完美的。 – Fozefy

+0

以前的帖子中的错误应为: vyScore = length(vx) - vxScore – Fozefy