sort.list(y)中的错误在R中使用'Strata()'

时间:2013-09-03 11:41:19

标签: 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?'

请帮助我如何获得这个分层样本。变量'Team'是'Factor'类型。

数据如下:

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)

2 个答案:

答案 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应该是列名列表,而不是对实际列数据的引用。


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

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

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

 sampledData <- getdata(data, smpl)

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