У меня есть фрейм данных, который состоит из первого столбца (experiment.id), а остальные столбцы — это значения, связанные с этим идентификатором эксперимента. Каждая строка представляет собой уникальный идентификатор эксперимента. В моем фрейме данных есть столбцы в порядке от 10⁴ до 10⁵.
data.frame(experiment.id=1:100, v1=rnorm(100,1,2),v2=rnorm(100,-1,2) )
Этот фрейм данных является источником моего демонстрационного пространства. Что я хотел бы сделать, так это для каждого уникального Experiment.id (строка) случайным образом выбрать (с заменой) одно из значений v1, v2, ...., v10000, связанных с этим идентификатором, и создать образец s1. В каждом образце s1 представлены все идентификаторы экспериментов.
В конце концов я хочу выполнить 10⁴ выборок, s1, s2, ...., s 10⁴ и вычислить некоторую статистику.
Что было бы наиболее эффективным способом (в вычислительном отношении) для выполнения этого процесса выборки. Я хотел бы максимально избежать циклов for.
Обновление: Мои вопросы касаются не только семплирования, но и хранения сэмплов. Я предполагаю, что мой реальный вопрос заключается в том, есть ли более быстрый способ выполнить вышеперечисленное, кроме
d<-data.frame(experiment.id=1:1000, replicate (10000,rnorm(1000,100,2)) )
results<-data.frame(d$experiment.id,replicate(n=10000,apply(d[,2:10001],1,function(x){sample(x,size=1,replace=T)})))
replicate
иapply
по существу зацикливаются и медленны. Любой из опубликованных ответов будет быстрее, если у вас есть возможность хранить такую матрицу. Если пространство становится проблемой, вам нужно будет перебирать строки и получать из них статистику по ходу дела. Так что разберитесь с этой частью заранее. До сих пор вы подразумевали, что вам нужны значения 1e9. Вот и попадаем в многогигабайтную матрицу. - person John   schedule 28.12.2012