कैसे बताएं कि एक वेक्टर में क्या है और दूसरे में नहीं?


86

मतलाब में एक सदिश में मूल्यों को खोजने का एक तरीका है, लेकिन दूसरे में नहीं।

उदाहरण के लिए:

x <- c(1,2,3,4)
y <- c(2,3,4)

क्या ऐसा कोई कार्य है जो मुझे बताएगा कि इसमें मूल्य 1 xनहीं yहै?

जवाबों:


122

आप सेटडिफ़ () (सेट अंतर) फ़ंक्शन का उपयोग कर सकते हैं:

> setdiff(x, y)
[1] 1

37
वॉचआउट: setdiff(x,y)और setdiff(y,x)समान नहीं हैं।
शीआन

59

हाँ। वैक्टर के लिए आप बस %in%ऑपरेटर या is.element()फ़ंक्शन का उपयोग कर सकते हैं ।

> x[!(x %in% y)]
1

एक मैट्रिक्स के लिए, कई अंतर दृष्टिकोण हैं। merge()शायद सबसे सीधे आगे है। मेरा सुझाव है कि इस परिदृश्य के लिए इस प्रश्न को देखें


28

R में setdiff, Union, intersect, setequal, और is.element के लिए मदद फ़ाइल R में मानक सेट फ़ंक्शंस के बारे में जानकारी प्रदान करती है।

setdiff(x, y)उस के तत्वों को वापस xनहीं करता है y

जैसा कि ऊपर उल्लेख किया गया है, यह एक असममित अंतर है। उदाहरण के लिए:

> x <- c(1,2,3,4)
> y <- c(2,3,4,5)
> 
> setdiff(x, y)
[1] 1
> setdiff(y, x)
[1] 5
> union(setdiff(x, y), setdiff(y, x))
[1] 1 5


5

setdiff()एक मुश्किल कार्य है क्योंकि आउटपुट इनपुट के क्रम पर निर्भर है। आप इसके बजाय एक साधारण फ़ंक्शन लिख सकते हैं जो इसके ठीक विपरीत करता है intersect। यह कहीं बेहतर है।

>difference <- function(x, y) {
c(setdiff(x, y), setdiff(y, x))
}

#Now lets test it. 
>x <- c(1,2,3,4)
>y <- c(2,3,4,5)

>difference(x,y)
[1] 1 5

2

अगर:

x <- c(1,2,3,4)
y <- c(2,3,4)

इनमें से कोई भी भाव:

setdiff(x, y)
x[!(x %in% y)]
x[is.na(match(x,y))]
x[!(is.element(x,y))]

[1] 1लक्ष्य आपको सही उत्तर देगा , यदि लक्ष्य उन मूल्यों / पात्रों को ढूंढना है x, जो मौजूद नहीं हैं y

हालांकि, उपरोक्त अभिव्यक्तियों को लागू करना मुश्किल हो सकता है और वेक्टर की प्रकृति और अभिव्यक्ति में एक्स और वाई की स्थिति के आधार पर अवांछनीय परिणाम दे सकता है। उदाहरण के लिए, यदि:

x <- c(1,1,2,2,3,4)
y <- c(2,3,4)

और लक्ष्य केवल उन अद्वितीय मूल्यों / वर्णों को खोजना है x, जो वर्तमान में yया इसके विपरीत नहीं हैं। इनमें से किसी भी अभिव्यक्ति को लागू करना अभी भी सही उत्तर देगा [1] 1:

union(setdiff(x, y), setdiff(y, x))

जेरोमी एंग्लीम के योगदान के लिए धन्यवाद

या:

difference <- function(x, y) {
c(setdiff(x, y), setdiff(y, x))
}
difference(y,x)

वर्कहाउस के योगदान के लिए धन्यवाद

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.