2016-04-13 2 views
0

Учитывая кадр данных в виде:Случайные сэмплируют если-то еще в состоянии R

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

Я хотел бы попробовать val в каждом group случайным образом, с новым кадром данных в качестве результата. Проблема в том, что числов каждом group отличается, поэтому я не могу напрямую использовать sample(). Теперь я хотел бы определить размер выборки в состоянии if-else: если число val выше, скажем, 3, тогда выбираются три val с. В противном случае все val берутся как образцы. Как я могу это сделать? Заранее спасибо!

+0

@akrun Вы сказали, что я это сделал? На самом деле, я не знаю, о чем вы говорите? – user5779223

ответ

2

Мы можем использовать data.table. Преобразование «data.frame» к «data.table» (setDT(df)), сгруппированных по «группы», мы получим sample из «» Валу

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

Если нам нужно добавить условие, такое, что if nrow больше 3, sample 3 значения или else все значения.

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

Спасибо за ваш ответ, но как я могу пробовать «val» с размером, определяемым условием if-else? Благодарю. – user5779223

+0

@ user5779223 Я не видел твой комментарий. Обновлено сообщение – akrun

+0

Ваше решение отлично работает! Благодаря! – user5779223