У меня есть набор данных, из которого я хочу выбрать случайную выборку строк, но следуя некоторым предопределенным правилам. Это может быть очень простой вопрос, но я новичок в этом и все еще пытаюсь понять основные понятия. Мой набор данных содержит около 330 строк данных (я включил здесь упрощенную версию) с несколькими столбцами. Я хочу сэмплировать 50 строк из 330 (для простоты я сохранил эти числа в фиктивном наборе данных, так как это является частью моей проблемы) с возможностью добавления предопределенных правил в процесс выборки.
Вот фиктивная версия данных:
bank<-data.frame(matrix(0,nrow=330,ncol=5))
colnames(bank)<-c("id","var1","var2","year","lo")
bank$id<-c(1:330)
bank$var1<-sample(letters[1:5],330,replace=T)
bank$var2<-sample(c("s","r"),330,replace=T)
bank$var3<-sample(2010:2018,330,replace=T)
bank$lo<-sample(c("lo1","lo2","lo3","lo4","lo5","lo6"),330,replace=T)
Код, который я использовал для выборки правильного количества строк:
library(splitstackshape)
x<-splitstackshape::stratified(indt=bank,group=c("var1","var2","year","lo"),0.151)
Однако это не выбор 50 строк. Первоначально я пытался определить размер = 50, но я получил следующую ошибку:
Groups b s 2012 lo4,... [there is a very long list here],...contain fewer rows than requested. Returning all rows.
Затем я попытался определить размер в процентах: 0,151 (15,1%?), Который должен быть правильным 50 из 330, но это выборка 5 строк (я пробовал 0,5 и 44 строки, и если я пытаюсь 0,500000001, то выборка 287 строк? ??).
Что мне не хватает? На данный момент я застрял здесь.
Как только мне удастся выбрать правильное количество строк (50), я бы хотел определить некоторые правила, например: только до 50% выборки может иметь 2018 (банк $ год) И только до половины банка $ год == строки 2018 могут иметь банк $ var2 == "r". Очевидно, я не ожидаю, что кто-то сделает это для меня, но не могли бы вы дать несколько советов по
1- Почему я получаю неправильное количество строк (возможно, только синтаксис?)
2- какой пакет мне следует изучить, если splitstackshape :: straified () не является лучшим или хорошим выбором для достижения этой цели?
Большое спасибо!
M