2013-04-05 15 views
5

Wenn Sie einen Vektor von Zeichenketten haben und Sie wissen wollen, welche Übereinstimmung. Es ist eine einfache Sache,% in% zu verwenden.Zeichenketten nicht% in% anderer Vektor von Zeichenketten finden

x <- c("red","blue","green") 
y <- c("yellow","blue","orange") 

which(x %in% y) # Literally, which X are in Y. 

Aber was ist mit dem Gegenteil, wo möchten Sie das X nicht in Y finden?

+1

Try 'die (x% in% y!)'. –

+1

Roman füge es als Lösung hinzu –

+0

@ RomanLuštrik Ich benutze 'was (is.na (match (x, y))' es schien einfach zu hässlich. –

Antwort

8

Eine nette Art und Weise, die Ich mag (die ich von @joran gelernt, iirc) ist:

`%nin%` <- Negate(`%in%`) 
which(x %nin% y) 
[1] 1 3  
+2

'% nin%' wird unter anderem auch vom 'Hmisc'-Paket bereitgestellt. – krlmlr

+0

+1 Das ist cool –

+1

+1 zu Arun für die extra Meile/Kilometer. –

5

Doing %in% gibt einen Vektor von Wahr und False zurück. Mit einem Ausrufezeichen werden diese Ts und Fs herumgedreht, und indem Sie alles in which einpacken, erhalten Sie Indizes.

> which(!x %in% y) 
[1] 1 3 
> which(x %in% y) 
[1] 2 
+1

Auch wenn du 'x [was (x! in% y)] ', dann bevorzugen Sie vielleicht' setdiff (x, y) '. Letzteres gilt auch "einzigartig". – flodel

+2

Ich mag paranoid sein, aber ich würde demütig vorschlagen 'which (! (X% in% y))', um die Lesbarkeit zu verbessern. –

+0

@ Ferdinand.kraft Ich stimme dir zu und ich mag die Klammer auch. Dies ist jedoch ein Grund mehr, warum der Vorschlag "% ni%" so großartig ist! –

Verwandte Themen