2013-04-05 13 views
5

Dizeleri bir vektörünüz varsa ve hangi eşleşmeyi öğrenmek istediğinizi varsa. %% Ini kullanma basit bir meseledir.Dizelerin bulunması% dizede% dizenin diğer vektörü

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

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

Ama ne Y'de hangilerinin X'in bulmak istiyoruz karşısında, yaklaşık ?

+1

deneyin 'hangi'. –

+1

Roma bir çözüm olarak ekleyin –

+0

@ RomanLuštrik Kullanmakta olduğum şey (is.na (eşleşme (x, y)) 'sadece çok çirkin görünüyordu .. –

cevap

8

Sevdiğim Temiz bir yolu (ı @joran öğrendim ki iirc) 'dir: (% y x%!)

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

'% nin%', diğerlerinin yanı sıra 'Hmisc' paketi tarafından sağlanır. – krlmlr

+0

+1 Bu ekstra mil/kilometre gidiyor için Arun için –

+1

+1 den havalı. –

5

%in% yapmak, gerçekleri ve falsi bir vektör döndürür. Bir ünlem işareti kullanmak, bu Ts ve F'leri etrafa çevirir ve which'daki herşeyi sarmalayarak size indeks verir.

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

Ayrıca, eğer x yapacaksanız x [ki (! X% % y)] ', sonra setdiff (x, y)' yi tercih edebilirsiniz. İkincisi de 'benzersiz' uyguluyor. – flodel

+2

Paranoyak olabilirim ama okunabilirliği arttırmak için ne (! (% X in% y)) '' anlamına gelen alçakgönüllülük öneririm. –

+0

@ Ferdinand.kraft Size katılıyorum ve ben de parantezi seviyorum. Ancak, bu, aşağıdaki %% %% önerinizin bu kadar harika olmasının bir nedenidir! –

İlgili konular