खोज…


टिप्पणियों

एक सेट में प्रत्येक अलग तत्व की केवल एक प्रति शामिल होती है। कुछ अन्य प्रोग्रामिंग भाषाओं के विपरीत, बेस आर में सेट के लिए एक समर्पित डेटा प्रकार नहीं है। इसके बजाय, R केवल अपने विशिष्ट तत्वों को ले कर एक वेक्टर की तरह व्यवहार करता है। यह सेट ऑपरेटरों, setdiff , intersect , union , setequal और %in% पर लागू होता है। v %in% S लिए, केवल S को एक सेट के रूप में माना जाता है, हालांकि, वेक्टर v

R में एक सच्चे सेट डेटा प्रकार के लिए, Rcpp पैकेज कुछ विकल्प प्रदान करता है।

वैक्टर के जोड़े के लिए ऑपरेटरों को सेट करें

तुलना सेट

आर में, एक वेक्टर में डुप्लिकेट तत्व शामिल हो सकते हैं:

v = "A"
w = c("A", "A")

हालांकि, एक सेट में प्रत्येक तत्व की केवल एक प्रति शामिल होती है। R एक सदिश को केवल उसके अलग-अलग तत्वों को ले कर एक सेट की तरह मानता है, इसलिए ऊपर दिए गए दो वैक्टर को एक ही माना जाता है:

setequal(v, w)
# TRUE

संयोजन सेट

प्रमुख कार्यों में प्राकृतिक नाम हैं:

x = c(1, 2, 3)
y = c(2, 4)

union(x, y)
# 1 2 3 4

intersect(x, y)
# 2

setdiff(x, y)
# 1 3

ये सभी एक ही पृष्ठ पर दस्तावेज हैं ?union

वैक्टर के लिए सदस्यता निर्धारित करें

%in% ऑपरेटर एक सेट के साथ एक वेक्टर की तुलना करता है।

v = "A"
w = c("A", "A")

w %in% v
# TRUE TRUE

v %in% w
# TRUE

बाईं ओर के प्रत्येक तत्व को व्यक्तिगत रूप से व्यवहार किया जाता है और दाईं ओर वेक्टर से जुड़े सेट में सदस्यता के लिए परीक्षण किया जाता है (इसके सभी विशिष्ट तत्वों से मिलकर)।

समानता परीक्षणों के विपरीत, %in% हमेशा TRUE या FALSE :

c(1, NA) %in% c(1, 2, 3, 4)
# TRUE FALSE

प्रलेखन पर है ?`%in%`

वैक्टर के कार्टेशियन या "क्रॉस" उत्पाद

फॉर्म (x, y) के प्रत्येक वेक्टर को खोजने के लिए जहां x को वेक्टर X से लिया जाता है और Y से Y, हम का उपयोग expand.grid

X = c(1, 1, 2)
Y = c(4, 5)

expand.grid(X, Y)

#   Var1 Var2
# 1    1    4
# 2    1    4
# 3    2    4
# 4    1    5
# 5    1    5
# 6    2    5

नतीजा यह है कि प्रत्येक वेक्टर के लिए एक कॉलम के साथ एक डेटा.फ्रेम पारित हो जाता है। अक्सर, हम वैक्टर के "ग्रिड" का विस्तार करने के बजाय सेट के कार्टेशियन उत्पाद को लेना चाहते हैं। हम unique , lapply और do.call उपयोग कर सकते हैं:

m = do.call(expand.grid, lapply(list(X, Y), unique))

#   Var1 Var2
# 1    1    4
# 2    2    4
# 3    1    5
# 4    2    5

संयोजनों के लिए कार्य करना

यदि आप प्रत्येक परिणामी संयोजन f(x,y) पर एक फ़ंक्शन लागू करना चाहते हैं, तो इसे दूसरे कॉलम के रूप में जोड़ा जा सकता है:

m$p = with(m, Var1*Var2)
#   Var1 Var2  p
# 1    1    4  4
# 2    2    4  8
# 3    1    5  5
# 4    2    5 10

यह तरीका उतने ही वैक्टर के लिए काम करता है, जितने की जरूरत होती है, लेकिन दो के विशेष मामले में, कभी-कभी एक मैट्रिक्स में परिणाम होना बेहतर होता है, जिसे outer साथ हासिल किया जा सकता है:

uX = unique(X)
uY = unique(Y)

outer(setNames(uX, uX), setNames(uY, uY), `*`)

#   4  5
# 1 4  5
# 2 8 10

संबंधित अवधारणाओं और उपकरणों के लिए, कॉम्बिनेटरिक्स विषय देखें।

अद्वितीय / ड्रॉप डुप्लिकेट बनाएं / एक वेक्टर से अलग तत्वों का चयन करें

unique ड्रॉप डुप्लिकेट करता है ताकि परिणाम में प्रत्येक तत्व अद्वितीय हो (केवल एक बार दिखाई देता है):

x = c(2, 1, 1, 2, 1)

unique(x)
# 2 1

मानों को उस क्रम में लौटाया जाता है, जिस क्रम में वे पहली बार दिखाई दिए थे।

duplicated टैग प्रत्येक डुप्लिकेट किए गए तत्व:

duplicated(x)
# FALSE FALSE TRUE TRUE TRUE

anyDuplicated(x) > 0L यह anyDuplicated(x) > 0L का एक त्वरित तरीका है कि क्या वेक्टर में कोई डुप्लिकेट है।

वैक्टर के लिए सेट ओवरलैप्स / वेन आरेख मापना

दो सेटों के कितने तत्वों को ओवरलैप करने के लिए, एक कस्टम फ़ंक्शन लिख सकता है:

xtab_set <- function(A, B){
    both    <-  union(A, B)
    inA     <-  both %in% A
    inB     <-  both %in% B
    return(table(inA, inB))
}

A = 1:20
B = 10:30

xtab_set(A, B)

#        inB
# inA     FALSE TRUE
#   FALSE     0   10
#   TRUE      9   11

विभिन्न पैकेजों द्वारा प्रस्तुत एक वेन आरेख का उपयोग कई सेटों में ओवरलैप काउंट की कल्पना करने के लिए किया जा सकता है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow