2011-12-01 11 views
6

Załóżmy, że mam wektor x<-c(1,2,NA,4,5,NA).Różnice między wektorami _ z uwzględnieniem NA

ubiegać jakieś mitologiczne kod do tego wektora, co skutkuje innym wektorze, y<-c(1,NA,3, 4,10,NA)

Teraz pragnę dowiedzieć się w której pozycjonuje moje dwa wektory różnią, gdzie liczę dwa NA s traktować tak samo, i jeden NA i inny niż NA (np. drugi element z dwóch przykładowych wektorów).

W szczególności, dla mojego przykładu, chciałbym skończyć z wektorem posiadającym c(2,3,5).

Dla mojego przypadku użycia, nie jestem zadowolony z wektora zmiennych logicznych, ale oczywiście mogę łatwo przekonwertować (which), więc przyjmuję to również.

Mam kilka rozwiązań takich jak:

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

ale czuje jakbym wyważania otwartych drzwi tutaj. Jakieś lepsze opcje?

+3

Wydaje mi się całkowicie uzasadnione. –

+0

Co to jest kod mitologiczny? – James

+0

@ James: to jak ta stara kreskówka z kilkoma przerażającymi równaniami na szczycie tablicy, a następnie stwierdzenie "następna cuda", po której następuje pożądane końcowe równanie. –

Odpowiedz

0

Jedno rozwiązanie posible (ale na pewno nie jest najlepszy):

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

Ma to kilka zalet (na przykład nie działa dla wektorów znaków), ale poza tym: jeśli zarówno oryginalny, jak i nowy wektor trzymają 'NA' w pewnym miejscu, to oznaczy to miejsce jako inne (mam zredagowałem moje oryginalne pytanie, aby uwzględnić to w przykładzie). Mimo to dziękuję za trud. –

6

Jak o zapętlenie i korzystania identical?

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

A na stanowiska:

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

lub

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

Jakieś przesłanki za głosowaniem w dół? – James

+0

Interesujące, ale prawdopodobnie przesadne, ponieważ sprawdzi różnice w nazwach i innych atrybutach. (Downvote to nie ja!) –

+0

@RichieCotton Dobra uwaga, sądzę, że opcje mogą dopracować to zachowanie, ale wydaje się, że tylko to czyni bardziej surowym. – James

Powiązane problemy