সামগ্রিকভাবে প্রতিস্থাপন ছাড়াই কীভাবে একটি বড় তালিকা থেকে 10 এর অনেক নমুনা নেওয়া যায়


12

আমি একটি বিশাল সংখ্যক ডেটা (20,000 ডেটা পয়েন্ট) পেয়েছি, যেখান থেকে আমি 10 ডেটা পয়েন্টের বারবার নমুনা নিতে চাই। যাইহোক, একবার আমি এই 10 ডেটা পয়েন্টগুলি বেছে নিয়েছি, আমি চাই যে সেগুলি আবার না বাছাই।

আমি sampleফাংশনটি ব্যবহার করার চেষ্টা করেছি , তবে ফাংশনের একাধিক কলের পরিবর্তে নমুনা দেওয়ার বিকল্প নেই বলে মনে হচ্ছে। এটি করার কোন সহজ পথ আছে কি?

উত্তর:


9

আপনি অনুমতি দেওয়ার জন্য পুরো ডেটা সেটটিতে একবার নমুনা কল করতে পারেন। তারপরে আপনি যখন একটি নমুনা পেতে চান আপনি প্রথমটি ১০ টি দখল করতে পারেন আপনি যদি অন্য একটি নমুনা চান তবে পরের ১০ টি ধরুন So তাই আরও অনেক কিছু।


9

আর-তে বাস্তবায়িত ডেসনের চিন্তাভাবনা:

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

এন

@ সিএল ধন্যবাদ! তবে আমি মনে করি এটি কার্যকর হবে। কাজটি ছিল ডেটাপয়েন্টের সেট থেকে 10 মাপের নমুনা দেওয়া। ধরুন n = দৈর্ঘ্য (ডেটাপয়েন্ট)। কোড এই জাতীয় নমুনার সর্বাধিক সংখ্যা (এন% /% 10) দেয়। প্রথম কোণার কেসটি হল এন <10 (যাহাই হউক না কেন ডেটাসেটটিকে 'বৃহত', অর্থাৎ n> 10 হিসাবে বর্ণনা করে সমস্যা বিবরণীতে প্রত্যাখ্যান করা হয়েছে)। সেক্ষেত্রে আপনি ডেটাপয়েন্টগুলি ফিরে পাবেন এবং একটি সতর্কতা পাবেন (কোনও ত্রুটি নয়)। দ্বিতীয় কোণার কেসটি হ'ল যদি সেখানে ঝুঁকির উপাদান থাকে (যখন এন %% 10! = 0) তারপরে আপনি যতটা সম্ভব নমুনা এবং একটি সতর্কতা পান (ত্রুটি নয়)। এই দুটি ক্ষেত্রে একটির মধ্যে বিজোড় এন পরিস্থিতি পূর্ণ হয়।
কনজুগেটপায়ার

মনে হচ্ছে তালিকার প্রথম উপাদানটি 10 ​​নয়, 11 এর দৈর্ঘ্যের এবং sum(unlist(lapply(sample, length)))এর দৈর্ঘ্য datapoints(যা আমি 1001 এ সেট করেছি) ফিরিয়ে দেব।
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 আপনার উত্তরটি সঠিক দিকে চলছে। তবে কমপক্ষে আমার বর্তমান আর-সংস্করণ ৩.৪.৩ এর জন্য এটি কার্যকর হয় না। তবে কিছু টুইট করে এটি কাজ করে:

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

যেহেতু আমি এখনও মন্তব্য করতে পারি না আমি এখানে উত্তর দেওয়া বেছে নিয়েছি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.