2

当我运行命令时:

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)
4

2 回答 2

1

这应该有效:

library(sampling)

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

stratanames应该是列名列表,而不是对实际列数据的引用。


更新: 现在示例数据可用,我看到另一个问题:您正在抽样而不替换(wor),但您的样本比可用数据大。在这种情况下,您需要更换样品

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

顺便说一句,您可以通过以下方式获得实际数据:

 sampledData <- getdata(data, smpl)
于 2013-09-03T12:06:48.487 回答
0

这并不能真正回答你的问题,但很久以前,我写了一个名为的函数stratified,它可能对你有用。

我已将其作为 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:组成“层”的一列或多列的字符向量。
  • size:所需的样本量。
    • 如果size是一个小于 1 的值,则从每个层中抽取一个比例样本。
    • 如果size是 1 或更大的单个整数,则从每个层中获取该数量的样本。
    • 如果size是整数向量,则为每个层获取指定数量的样本。建议您使用命名向量。例如,如果您有两个层,“A”和“B”,并且您想要“A”中的 5 个样本和“B”中的 10 个样本,您将输入size = c(A = 5, B = 10)
  • select:这允许您在采样过程中对组进行子集化。这是一个list. 例如,如果您的group变量是“组”,它包含三个层,“A”、“B”和“C”,但您只想从“A”和“C”中抽样,您可以使用select = list(Group = c("A", "C")).
  • replace: 用于更换取样。
于 2013-09-03T13:52:12.030 回答