2013-04-05 15 views
5

Se si dispone di un vettore di stringhe e si desidera sapere quale corrispondenza. È semplicemente questione di usare% in%.Trovare stringhe non% in% altro vettore di stringhe

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

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

Ma che dire del contrario, dove vorresti trovare quale X non si trova in Y?

+1

Prova 'che (x% a% a!)'. –

+1

Roman aggiungilo come soluzione –

+0

@ RomanLuštrik Stavo usando 'which (is.na (match (x, y))' sembrava troppo brutto –

risposta

8

Un modo pulito che mi piace (che ho imparato da @joran, IIRC) è:

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

'% nin%' è fornito anche dal pacchetto 'Hmisc', tra gli altri. – krlmlr

+0

+1 Questo è bello –

+1

+1 ad Arun per fare il miglio/chilometro in più. –

5

Fare %in% restituisce un vettore di segni e falsi. Usando un punto esclamativo girerai intorno a quelle Ts e F e, avvolgendo tutto in which, otterrai degli indici.

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

Inoltre, se hai intenzione di fare 'x [quale (! X% in% y)] ', quindi potresti preferire' setdiff (x, y) '. Quest'ultimo applica anche "unique". – flodel

+2

Posso essere paranoico, ma suggerirei umilmente 'quale (! (X% in% y))', per migliorare la leggibilità. –

+0

@ Ferdinand.kraft Sono d'accordo con te e mi piace anche la parentesi. Tuttavia, questa è una ragione in più per cui il suggerimento '% ni%' è così bello! –

Problemi correlati