कुल मिलाकर प्रतिस्थापन के बिना, एक बड़ी सूची से 10 के कई नमूने कैसे लें


12

मुझे डेटा (20,000 डेटा पॉइंट) का एक बड़ा सेट मिला है, जिसमें से मैं 10 डेटा पॉइंट्स के बार-बार नमूने लेना चाहता हूं। हालांकि, एक बार मैंने उन 10 डेटा बिंदुओं को चुना है, मैं चाहता हूं कि उन्हें फिर से नहीं चुना जाए।

मैंने sampleफ़ंक्शन का उपयोग करने की कोशिश की है, लेकिन यह फ़ंक्शन के कई कॉल पर प्रतिस्थापन के बिना नमूना करने का विकल्प नहीं है। क्या ऐसा करने के लिए एक सरल तरीका है?

जवाबों:


9

आप इसे अनुमति देने के लिए पूरे डेटा सेट पर एक बार नमूना कॉल कर सकते हैं। फिर जब आप एक नमूना प्राप्त करना चाहते हैं तो आप पहले 10. हड़प सकते हैं। यदि आप चाहते हैं कि दूसरा नमूना अगले 10. को पकड़ा जाए।


9

दासोन के विचार, आर में लागू:

sample <- split(sample(datapoints), rep(1:(length(datapoints)/10+1), each=10))
sample[[13]] # the thirteenth sample

(+1) वास्तव में स्वच्छ आर कोड। ध्यान दें, यह काम नहीं करेगा यदि विषम है। n
चूरू

@chl धन्यवाद! लेकिन मुझे लगता है कि यह काम करेगा। यह कार्य डेटापॉइंट के एक सेट से आकार 10 के नमूने देना था। मान = लंबाई (डेटा पॉइंट)। कोड ऐसे नमूनों की अधिकतम संख्या (n% /% 10) देता है। पहले कोने का मामला n <10 है (वैसे भी डेटा स्टेटमेंट में 'बड़े' यानी n> 10) का वर्णन करके समस्या बयान में खारिज कर दिया गया है। उस स्थिति में आपको डेटा पॉइंट वापस मिल जाते हैं और चेतावनी (त्रुटि नहीं)। दूसरा कोने का मामला है अगर झूलने वाले तत्व हैं (जब n %% 10! = 0)। फिर आपको यथासंभव अधिक से अधिक नमूने और चेतावनी मिलती है (त्रुटि नहीं)। इन दो मामलों में से एक में विषम परिस्थितियों को रखा गया है।
संयुक्ताक्षरी

ऐसा लगता है कि सूची का पहला तत्व लंबाई 11 का है, 10 का नहीं है, और (जिसकी मैंने 1001 पर सेट है) sum(unlist(lapply(sample, length)))की लंबाई लौटा दी है datapoints
chl

@chl लानत है! आप बिल्कुल सही हैं।
कंजुगेटपायर

2

यह काम करना चाहिए:

x <- rnorm(20000)
x.copy <- x
samples <- list()
i <- 1
while (length(x) >= 10){
    tmp <- sample(x, 10)
    samples[[i]] <- tmp
    i <- i+1
    x <- x[-match(tmp, x)]
}

table(unlist(samples) %in% x.copy)

हालांकि, मुझे नहीं लगता कि यह सबसे सुरुचिपूर्ण समाधान है ...


1

@conjugateprior आपका उत्तर सही दिशा में जा रहा है। लेकिन कम से कम मेरे वर्तमान आर-संस्करण 3.4.3 के लिए, यह काम नहीं करता है। हालांकि कुछ ट्विकिंग के साथ यह काम करता है:

mysample<-split(sample(length(datapoints)), 1:10)
mysample[[9]] ## the ninth sample

चूंकि मैंने अभी तक कोई टिप्पणी नहीं की है, इसलिए मैंने यहां जवाब देना चुना।

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