2017-09-28 20 views
-1

私は、2つのベクトルの同じインデックスを持つ同じ要素を見つけ、それらを数える効率的な方法を探しています。 は私が2つのベクトルの同じインデックスを持つ同じ要素を見つける

x=c(2,1,8,1,4) 
y=c(9,1,8,0,4) 

例えば

、私は2つのベクトルを(実際には、彼らは非常に大きくなります)持っているのであれば、[1,1] を私は2つのベクトルを持っていると私は私が実現した回数を知りたいと言います1がxとyの同じ位置に1回だけ出現したことを数えたい。 私はあなたの助けに非常に感謝しています!

+3

私は何かが欠けているように感じますが、これは 'sum(x == y&x == 1)'ではありません。 – Henrik

+1

私はチェックして、ベクトルを比較するときに(1,1)を与える同じエントリーをすべて数えなかった。 akrunの縮小アプローチは完全に動作します – Arbiturka

+2

@Arbiturkaそれは面白いです...それらは論理的には同等ですが、多分浮動小数点演算が干渉しているようです。あなたは例を挙げることができますか? – Frank

答えて

0

私たちは、ベクトルの両方が同じ位置に1を持っている場合のみ1 1が存在する場合、それは、2こととなり、rowSumsを取得し、それが1に等しいかどうかをチェックし、ベクトルをINGのcbindによってmatrixを作成することができます値は、したがって、1である論理vector==2または==1)に変換し、これも1のいずれかで「X」または「Y」であるか否かをチェックすることsum

sum(rowSums(cbind(x, y)==1)==2) 
sum(rowSums(cbind(x, y)==1)==1) 

注でカウントを取得します'x'だけでなく


またはこれらのソリューションは、複数のvectorに拡張することができることをReduce

sum(Reduce(`&`, lapply(list(x, y), `==`, 1))) 

注意してねだけではなく2

0

あなたが必死に必要とする迅速なtidyverse修正をお探しの方のすべての場合:

インデックスの
library(purrr) 

map(list(x, y), ~.== 1) %>% reduce(., `&`) %>% sum 

map(list(x, y), ~.== 1) %>% reduce(., `&`) %>% which 
関連する問題