2011-12-01 12 views
6

ベクトルがあるとします。x<-c(1,2,NA,4,5,NA)ベクトルの相違_including_NA

私は同じであるとして2 NA秒を数えるところ今私は、私の二つのベクトルが異なる位置れる見つけるたい

y<-c(1,NA,3, 4,10,NA)

、別のベクトルになりそのベクトルにいくつかの神話のコードを適用1つのNAと、NA(例えば、2つの例ベクトルの第2の要素)とを含む。

具体的には、私の例では、c(2,3,5)を保持するベクトルにしたいと思います。

私の使用例では、論理変数のベクトルには満足していませんが、明らかに簡単に変換することができます(which)ので、これも受け入れます。

私のようないくつかの解決策があります。

simplediff<-x!=y 
nadiff<-is.na(x)!=is.na(y) 
which(simplediff | nadiff) 

を私はここに車輪の再発明てるようには感じています。より良いオプションはありますか?

+3

は私には完全に合理的なようです。 –

+0

神話コードとは何ですか? – James

+0

@ジェームズ:それは黒い板の上に恐ろしい方程式の束である古い漫画のようです。そして、 "次の奇跡が起こります"というステートメントが続き、最後に希望する最終方程式が続きます。 –

答えて

0

一つかのう溶液(しかし、必ずそれが最善ではありません):

(1:length(x))[-which((x-y)==0)] 
+0

これにはいくつかの利点があります(たとえば、文字ベクタでは機能しません)。ただし、それ以外の点では、元のベクトルと新しいベクトルの両方がある場所で「NA」を保持している場合、私のオリジナルの質問を編集してこの例に含める)。それでも、努力のおかげで。 –

6

どのようにループしてidenticalを使用してはどうですか?

!mapply(identical,x,y) 
[1] FALSE TRUE TRUE FALSE TRUE FALSE 

と位置について:

seq_along(x)[!mapply(identical,x,y)] 
[1] 2 3 5 

または

which(!mapply(identical,x,y)) 
[1] 2 3 5 
+0

賛成投票の背景にある根拠は? – James

+0

名前やその他の属性の違いをチェックするので、興味深いかもしれませんがおそらく過剰です。 (Downvoteは私ではありませんでした!) –

+0

@RichieCotton良い点は、オプションがその動作を微調整できると思っていましたが、それはもっと厳しいものに過ぎません。 – James