当我运行命令时:
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)
答案 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
的函数,可能对你有用。
请注意,当您要求的样本大于您的数据时,它只会返回所有相关行。
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
:对于替换品抽样。