6

vector があるとしx<-c(1,2,NA,4,5,NA)ます。

そのベクトルに神話のコードを適用すると、別のベクトルが生成されます。y<-c(1,NA,3, 4,10,NA)

ここで、2 つのベクトルがどの位置で異なるかを調べたいと思います。ここで、2 つNAの が同じであると数え、1NAと非- を数えますNA(たとえば、2 つの例のベクトルの 2 番目の要素)。

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

私のユースケースでは、論理変数のベクトルに満足していませんが、明らかに ( which) を簡単に変換できるので、それも受け入れます。

次のような解決策があります。

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

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

4

2 に答える 2

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
于 2011-12-01T11:13:59.723 に答える
0

考えられる解決策の 1 つ (ただし、最善ではないことは確かです):

(1:length(x))[-which((x-y)==0)]
于 2011-12-01T10:57:07.347 に答える