2016-04-13 17 views
0

eğer-başka koşulu ile örnek:Rastgele biçimde bir veri çerçevesi alındığında R

group   val 
A    10 
A    1 
B    9 
C    6 
... 

I sonucu olarak, yeni bir veri çerçevesi ile, rastgele olarak her group içinde val örnek istiyorum. Sorun, her bir group'daki val sayısının farklı olmasıdır, bu yüzden doğrudan sample() kullanamıyorum. Şimdi, örnek boyutunu bir if-else koşulunda belirlemek istiyorum: val sayısı 3'ten daha yüksekse, 3 val s örneklenir. Aksi halde, tüm val örnekleri olarak alınır. Bunu nasıl yapabilirim? Şimdiden teşekkür ederim!

+0

@akrun Yaptığımı söylediniz mi? Gerçekten ne hakkında konuştuğunu bilmiyorum. – user5779223

cevap

2

data.table'u kullanabiliriz. 'Grubunun' göre gruplandırılmış (setDT(df)) 'data.table' için 'data.frame' dönüştürme, biz 'val'

library(data.table) 
setDT(df)[, .(val=sample(val)), by = group] 

bir koşul eklemeniz gerekiyorsa arasında sample olsun böyle if sat_say o 3'ten büyük, sample 3 değerleri veya else tüm değerler.

setDT(df)[, if(.N >3) sample(val, 3, replace=FALSE) else sample(val), by = group] 
+0

Cevabınız için teşekkürler, ancak if-else koşulu ile belirlenen boyutta val'i nasıl örnekleyebilirim? Teşekkürler. – user5779223

+0

@ user5779223 Yorumunuzu görmedim. Güncelleştirme sonrası – akrun

+0

Çözümünüz mükemmel çalışıyor! Teşekkürler! – user5779223