Genel olarak değiştirilmeden, büyük bir listeden 10'dan fazla örnek nasıl alınır


12

10 veri noktasının tekrarlanan örneklerini almak istediğim geniş bir veri setim var (20.000 veri noktası). Ancak, bu 10 veri noktasını seçtikten sonra, tekrar seçilmemelerini istiyorum.

sampleFonksiyonu kullanmayı denedim , ancak fonksiyonun birden fazla çağrısı yerine değiştirmeden örnekleme seçeneği yok gibi görünüyor. Bunu yapmanın kolay bir yolu var mı?

Yanıtlar:


9

İzin vermek için tüm veri kümesinde örneği bir kez çağırabilirsiniz. Daha sonra bir örnek almak istediğinizde ilk 10'u alabilirsiniz. Başka bir örnek istiyorsanız sonraki 10'u alın.


9

Dason'un düşüncesi, R'de uygulandı:

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

n

@chl Teşekkürler! Ama bence işe yarayacak. Görev, bir dizi veri noktasından 10 büyüklüğünde örnekler vermekti. N = uzunluk (veri noktaları) olduğunu varsayın. Kod, bu tür numunelerin maksimum sayısını (n% /% 10) verir. İlk köşe durumu n <10'dur (yine de veri kümesini 'büyük', yani n> 10 olarak tanımlayarak sorun ifadesinde göz ardı edilir). Bu durumda veri noktalarını geri ve bir uyarı alırsınız (hata değil). İkinci köşe durumu, sarkan elemanlar (n %% 10! = 0 olduğunda). Sonra mümkün olduğunca çok örnek ve bir uyarı (hata değil) alırsınız. Bu iki durumdan birinde tuhaf durumlar ele alınmaktadır.
konjugateprior

Görünüşe göre listenin ilk öğesi 10 değil, 11 sum(unlist(lapply(sample, length)))uzunluğu ve datapoints1001 olarak ayarladığım uzunluğu döndürüyor.
chl

@chl Lanet olsun! Oldukça haklısın.
konjugateprior

2

Bu çalışmalı:

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)

Ancak, bunun en zarif çözüm olduğunu sanmıyorum ...


1

@conjugateprior Cevabınız doğru yönde gidiyor. Ama en azından şu anki R-sürüm 3.4.3 için çalışmıyor. Ancak bazı tweaking ile çalışır:

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

Henüz yorum yapamadığım için burada cevap vermeyi seçtim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.