Cách lấy nhiều mẫu 10 từ một danh sách lớn, mà không cần thay thế tổng thể


12

Tôi đã có một bộ dữ liệu lớn (20.000 điểm dữ liệu), từ đó tôi muốn lấy các mẫu lặp lại của 10 điểm dữ liệu. Tuy nhiên, một khi tôi đã chọn 10 điểm dữ liệu đó, tôi muốn chúng không được chọn lại.

Tôi đã thử sử dụng samplechức năng này, nhưng dường như không có tùy chọn để lấy mẫu mà không thay thế qua nhiều cuộc gọi của chức năng. Có một cách đơn giản để làm điều này?

Câu trả lời:


9

Bạn có thể gọi mẫu một lần trên toàn bộ tập dữ liệu để hoán vị nó. Sau đó, khi bạn muốn lấy một mẫu, bạn có thể lấy mẫu đầu tiên 10. Nếu bạn muốn một mẫu khác lấy mẫu tiếp theo 10. Cứ tiếp tục như vậy.


9

Suy nghĩ của Dason, được thực hiện trong R:

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

(+1) Mã R thực sự gọn gàng. Lưu ý, nó sẽ không hoạt động nếu là số lẻ. n
chl

@chl Cảm ơn! Nhưng tôi nghĩ nó sẽ hoạt động. Nhiệm vụ là đưa ra các mẫu có kích thước 10 từ một tập hợp các biểu dữ liệu. Giả sử n = length (datapoints). Mã cho số lượng tối đa (n% /% 10) của các mẫu đó. Trường hợp góc đầu tiên là n <10 (dù sao cũng được loại trừ trong báo cáo vấn đề bằng cách mô tả tập dữ liệu là 'lớn', tức là n> 10). Trong trường hợp đó, bạn nhận được các điểm dữ liệu trở lại và cảnh báo (không phải là lỗi). Trường hợp góc thứ hai là nếu có các phần tử lơ lửng (khi n %% 10! = 0). Sau đó, bạn nhận được càng nhiều mẫu càng tốt và cảnh báo (không phải là lỗi). Các tình huống kỳ lạ được đặt ra ở một trong hai trường hợp này.
liên hợp chiến binh

Có vẻ như phần tử đầu tiên của danh sách có độ dài 11, không phải 10 và sum(unlist(lapply(sample, length)))trả về độ dài của datapoints(mà tôi đặt thành 1001).
chl

@chl Chết tiệt! Bạn khá đúng.
liên hợp chiến binh

2

Điều này sẽ làm việc:

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)

Tuy nhiên, tôi không nghĩ đó là giải pháp tao nhã nhất ...


1

@conjugatep Warrior Câu trả lời của bạn đang đi đúng hướng. Nhưng ít nhất là đối với phiên bản R 3.4.3 hiện tại của tôi, nó không hoạt động. Tuy nhiên với một số điều chỉnh nó hoạt động:

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

Vì tôi không thể bình luận nhưng tôi đã chọn trả lời ở đây.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.