전체 목록을 대체하지 않고 큰 목록에서 10의 많은 샘플을 채취하는 방법


12

큰 데이터 세트 (20,000 개의 데이터 포인트)가 있는데 여기에서 10 개의 데이터 포인트를 반복적으로 샘플링하려고합니다. 그러나 일단 10 개의 데이터 포인트를 선택한 후에는 다시 선택하지 않기를 원합니다.

sample함수를 사용해 보았지만 함수를 여러 번 호출하지 않고도 샘플링 할 수있는 옵션이없는 것 같습니다. 이를 수행하는 간단한 방법이 있습니까?

답변:


9

전체 데이터 세트에서 샘플을 한 번 호출하여 순열시킬 수 있습니다. 그런 다음 샘플을 얻으려면 처음 10 개를 잡을 수 있습니다. 다른 샘플을 원하는 경우 다음 10 개를 잡으십시오. 등등.


9

R에서 구현 된 Dason의 생각 :

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

n

@chl 감사합니다! 그러나 나는 그것이 효과가 있다고 생각합니다. 이 작업은 일련의 데이터 포인트에서 크기가 10 인 샘플을 제공하는 것이 었습니다. n = 길이 (데이터 포인트)라고 가정합니다. 코드는 그러한 샘플의 최대 개수 (n % / % 10)를 제공합니다. 첫 번째 코너 케이스는 n <10입니다 (어쨌든 데이터 세트를 'large', 즉 n> 10으로 설명하여 문제 설명에서 제외됨)입니다. 이 경우 데이터 포인트가 반환되고 경고 (오류가 아님)가 표시됩니다. 두 번째 코너 사례는 매달려있는 요소가있는 경우입니다 (n %% 10! = 0 일 때). 그런 다음 가능한 많은 샘플과 경고 (오류가 아님)를 얻습니다. 이 두 경우 중 하나에 홀수 상황이 포함됩니다.
공역 이전

목록의 첫 번째 요소는 길이가 10이 아닌 11이며 sum(unlist(lapply(sample, length)))길이를 반환합니다 datapoints(1001으로 설정).
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 당신의 대답은 올바른 방향으로 가고 있습니다. 그러나 적어도 현재 R-version 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.