2014-01-21 50 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