Я пытаюсь выбрать фрейм данных из данного фрейма данных так, чтобы было достаточно выборок на каждом из уровней переменной.Это может быть достигнуто путем отделения кадра данных по уровням и выборке от каждого из них.Я думал, что ddply
(фрейм данных в фрейм данных) сделает это для меня.Взяв минимальный пример:
set.seed(1)
data1 <-data.frame(a=sample(c('B0','B1','B2'),100,replace=TRUE),b=rnorm(100),c=runif(100))
> summary(data1$a)
B0 B1 B2
30 32 38
Следующие команды выполняют выборку ...
Когда я вхожу ...
data2 <- ddply(data1,c('a'),function(x) sample(x,20,replace=FALSE))
Я получаю следующую ошибку
Error in `[.data.frame`(x, .Internal(sample(length(x), size, replace, :
cannot take a sample larger than the population when 'replace = FALSE'
Эта ошибка связана с тем, что x
внутри функции ddply
является не вектором, а фреймом данных.
Кто-нибудь знает, как добиться этой выборки?Я знаю, что один из способов - не использовать ddply, а просто выполнить (1) сегрегацию, (2) выборку и (3) сопоставление в три этапа.Но мне было интересно каким-то образом ... с базовыми или plyr
функциями ...
Спасибо за помощь ...