Скажем, у меня есть набор данных (как в смоделированном наборе данных ниже) с ответными данными, организованными по нескольким факторам (субъект и состояние).Как мне загрузить из этого набора данных так, чтобы я сначала получил случайную выборку субъектов (с заменой), а затем (в пределах этих случайно выбранных субъектов) случайную выборку ответов (с заменой)?
И почти так же важноКак мне сделать это эффективно - с тяжелой премией в скорости вычислений?
Вот смоделированный набор данных:
Subjects = c(rep(LETTERS[1:10],95), rep(LETTERS[1:8],3), rep(LETTERS[1:5],2))
data <- data.frame(
Subject = Subjects,
Condition = sample(c("Pre", "Post"), length(Subjects), replace = TRUE),
Response = sample(c(0,1), length(Subjects), replace = TRUE, prob = c(0.25, 0.75)),
ResponseTime = rgamma(length(Subjects),shape=5,scale=1)
)
Примечание: ответы здесь являются двоичными,Я сознательно сделал так, чтобы у одних испытуемых было меньше «испытаний», чем у других.
Dplyr позволяет сравнительно легко отбирать ответы по предмету, но таким образом, чтобы все предметы были представлены в финальной симуляции.Я адаптировал отличный пример от пользователя @ cb14 в отдельном потоке , чтобы продемонстрировать это:
if (!require(tidyverse)) {install.packages("tidyverse"); require(tidyverse)}
sim_output <- data %>% crossing(Simulation = seq(100)) %>% sample_n(n(), replace = TRUE)
sim_summary <- sim_output %>% group_by(Subject, Condition) %>%
summarize(Count = n(), Accuracy = mean(Response), ResponseTime = mean(ResponseTime))
Важно, что это действительно только один из двух шагов, которые я упомянул выше, а именновторая (выборка с заменой в рамках темы).Первый шаг (выборка предметов с заменой) отсутствует.
Хотя я привел здесь пример dplyr, я открыт для любого метода (base R, Rcpp, data.table).Заранее спасибо