วิธีการสุ่มตัวอย่างจำนวน 10 ตัวอย่างจากรายการขนาดใหญ่โดยไม่มีการเปลี่ยนโดยรวม


12

ฉันมีชุดข้อมูลจำนวนมาก (จุดข้อมูล 20,000 จุด) ซึ่งฉันต้องการใช้ตัวอย่างข้อมูล 10 จุดซ้ำหลายครั้ง อย่างไรก็ตามเมื่อฉันเลือกจุดข้อมูลทั้ง 10 แล้วฉันต้องการให้พวกเขาไม่ได้รับเลือกอีกครั้ง

ฉันลองใช้sampleฟังก์ชั่นนี้ แต่ดูเหมือนว่าจะไม่มีตัวเลือกตัวอย่างโดยไม่ต้องเปลี่ยนฟังก์ชั่นการโทรหลายครั้ง มีวิธีง่าย ๆ ในการทำเช่นนี้?

คำตอบ:


9

คุณสามารถเรียกตัวอย่างหนึ่งครั้งในชุดข้อมูลทั้งหมดเพื่ออนุญาต จากนั้นเมื่อคุณต้องการได้รับตัวอย่างคุณสามารถคว้า 10 อันดับแรกถ้าคุณต้องการตัวอย่างอื่นคว้า 10 ตัวอย่างต่อไปเรื่อย ๆ


9

ความคิดของ Dason นำมาใช้ใน R:

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

(+1) รหัส R ที่เรียบร้อยจริงๆ จากบันทึกมันจะไม่ทำงานหากเป็นเลขคี่ n
chl

@chl ขอบคุณ! แต่ฉันคิดว่ามันจะทำงาน ภารกิจคือให้ตัวอย่างขนาด 10 จากชุดดาต้าพอยน์ สมมติ n = length (ดาต้าพอยน์) รหัสให้จำนวนสูงสุด (n% /% 10) ของตัวอย่างดังกล่าว กรณีมุมแรกคือ n <10 (ตัดออกในคำแถลงปัญหาโดยอธิบายชุดข้อมูลว่า 'ใหญ่' เช่น n> 10) ในกรณีนี้คุณจะได้รับดาต้าพอยท์กลับมาและเตือน (ไม่ใช่ข้อผิดพลาด) กรณีมุมที่สองคือหากมีองค์ประกอบที่ห้อยอยู่ (เมื่อ n %% 10! = 0) จากนั้นคุณจะได้รับตัวอย่างมากที่สุดเท่าที่จะทำได้และมีคำเตือน (ไม่ใช่ข้อผิดพลาด) สถานการณ์คี่จะถูกรวมในหนึ่งในสองกรณีนี้
conjugateprior

ดูเหมือนว่าองค์ประกอบแรกของรายการคือความยาว 11 ไม่ใช่ 10 และsum(unlist(lapply(sample, length)))กลับความยาวของdatapoints(ซึ่งฉันตั้งไว้ที่ 1001)
chl

@chl ประณาม! คุณพูดถูก
conjugateprior

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 คำตอบของคุณกำลังไปในทิศทางที่ถูกต้อง แต่อย่างน้อยสำหรับรุ่น R 3.4.3 ปัจจุบันของฉันมันไม่ทำงาน อย่างไรก็ตามด้วยการปรับแต่งมันทำงาน:

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

เนื่องจากฉันไม่สามารถแสดงความคิดเห็นได้ แต่ฉันเลือกที่จะตอบที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.