2013-09-03 1 views
2

Когда я запускаю команду:Ошибка в sort.list (у) whlie с помощью 'страты()' в R

H <-length(table(data$Team)) 

n.h <- rep(5,H) 

strata(data, stratanames=data$Team,size=n.h,method="srswor"), 

я получаю заявление об ошибке:

'Error in sort.list(y) : 'x' must be atomic for 'sort.list' Have you called 'sort' on a list?' 

Пожалуйста, помогите мне, как могу ли я получить этот стратифицированный образец. Переменная «Команда» - это тип «Фактор».

данных, как показано ниже:

zz <- "Team League.ID Player Salary POS G GS InnOuts PO A 
ANA AL molinjo0 335000 C 73 57 1573 441 37 
ANA AL percitr0 7833333 P 3 0 149 1 3 
ARI NL bautida0 4000000 RF 141 135 3536 265 8 
ARI NL estalbo0 550000 C 7 3 92 19 2 
ARI NL finlest0 7000000 CF 104 102 2689 214 5 
ARI NL koplomi0 330000 P 72 0 260 6 23 
ARI NL sparkst0 500000 P 27 18 362 8 21 
ARI NL villaos0 325000 P 17 0 54 0 4 
ARI NL webbbr01 335000 P 33 35 624 13 41 
ATL NL francju0 750000 1B 125 71 1894 627 48 
ATL NL hamptmi0 14625000 P 35 29 517 13 37 
ATL NL marreel0 3000000 LF 90 42 1125 80 4 
ATL NL ortizru0 6200000 P 32 34 614 7 38 
BAL AL surhobj0 800000 LF 100 31 805 69 0" 

data <- read.table(text=zz, header=T) 

ответ

0

Это не реально ответить на ваш вопрос, но время давно назад, я написал функцию, называемую stratified, которая может вам пригодиться.

Я разместил его here as a GitHub Gist.

Обратите внимание, что когда вы попросили образцы, которые больше ваших данных, он просто возвращает все соответствующие строки.

output <- stratified(data, "Team", 5) 
# Some groups 
# ---ANA, ATL, BAL--- 
# contain fewer observations than desired number of samples. 
# All observations have been returned from those groups. 
table(output$Team) 
# 
# ANA ARI ATL BAL 
# 2 5 4 1 
output 
# Team League.ID Player Salary POS G GS InnOuts PO A 
# 1 ANA  AL molinjo0 335000 C 73 57 1573 441 37 
# 2 ANA  AL percitr0 7833333 P 3 0  149 1 3 
# 9 ARI  NL webbbr01 335000 P 33 35  624 13 41 
# 7 ARI  NL sparkst0 500000 P 27 18  362 8 21 
# 8 ARI  NL villaos0 325000 P 17 0  54 0 4 
# 3 ARI  NL bautida0 4000000 RF 141 135 3536 265 8 
# 6 ARI  NL koplomi0 330000 P 72 0  260 6 23 
# 12 ATL  NL marreel0 3000000 LF 90 42 1125 80 4 
# 13 ATL  NL ortizru0 6200000 P 32 34  614 7 38 
# 10 ATL  NL francju0 750000 1B 125 71 1894 627 48 
# 11 ATL  NL hamptmi0 14625000 P 35 29  517 13 37 
# 14 BAL  AL surhobj0 800000 LF 100 31  805 69 0 

Я добавлю официальную документацию к функции в какой-то момент, но вот резюме, чтобы помочь вам наилучшим образом использовать из него:

Аргументы в stratified являются:

  • df: входной data.frame
  • group: персонаж вектор со lumn или столбцы, составляющие «страты».
  • size: Желаемый размер выборки.
    • Если size является значением менее 1, пропорциональный образец берется из каждой страты.
    • Если size - одно целое число от 1 или более, это количество выборок берется из каждого слоя.
    • Если size - это вектор целых чисел, то для каждого страта берется заданное количество выборок. Рекомендуется использовать с именем vector.Например, если у вас есть две страты, «A» и «B», и вам нужно 5 образцов из «A» и 10 из «B», вы должны ввести size = c(A = 5, B = 10).
  • select: Это позволяет вам подмножать группы в процессе выборки. Это list. Например, если ваша переменная group была «Группой», и она содержала три страты: «A», «B» и «C», но вы хотели только попробовать с «A» и «C», вы можете использовать select = list(Group = c("A", "C")) ,
  • replace: Для отбора проб с заменой.
+0

Спасибо, много Ананады. Эта функция действительно работает отлично. –

+0

@ user2742844, рад это услышать. Я добавил описание аргументов функции, чтобы вы могли надеяться получить больше пробега :) – A5C1D2H2I1M1N2O1R2T1

+0

Очень любезно с вашей стороны. :) –

1

Это должно работать:

library(sampling) 

H <- length(levels(data$Team)) 
n.h <- rep(5, H) 
strata(data, stratanames=c("Team"), size=n.h, method="srswor") 

stratanames должен быть список имен столбцов, а не ссылка на фактические данные столбцов.


Update: Теперь, например, данные доступны, я вижу еще одну проблему: сэмплировании без-замены (приста), но ваши образцы больше, что имеющиеся данные. Вы должны попробовать с заменой в этом случае

smpl <- strata(data, stratanames=c("Team"), size=n.h, method="srswr") 

BTW, вы получаете фактические данные с:

sampledData <- getdata(data, smpl) 
+0

Я не понял, что делает код строки: "данные = data.frame (х = RNorm (100), Team = образец (с ("Blue", "Красный", "Желтый",«Голубой «), 100, replace = T)» означает и как использовать его в моей программе. У меня уже есть данные с 35 переменными, и мне нужно взять стратифицированную случайную выборку из этих данных. Необходимо использовать «Team» в качестве страт. –

+1

@ user2742844: это пример данных. Поскольку вы не представили пример, содержащий какие-либо данные для проверки проблемы/решения, я добавил это, чтобы люди могли попробовать код. Как правило, хорошей практикой является создание автономных примеров (особенно в вопросах) – f3lix

+0

Спасибо за поддержку yur, но это не работает. Я получаю ту же ошибку. –

Смежные вопросы