2017-10-09 96 views
-1

我对R相当新鲜。现在,当样本大小基于组更改时,我停止了分层抽样。分层抽样大小因R中的组而异R

的数据看起来像这样:

enter image description here

和样品大小而变化根据不同的基团或阶层:

enter image description here

我用分层抽样,但不能图取出样本量。

Result <- stratified(Population, c("Loc", "Format"), 
       Population$SampleSize), replace = FALSE, 
       keep.rownames = T) 

一条错误消息说“大小应该作为一个命名向量输入”。谁能帮忙?谢谢。

+0

当你删除'$人口后SampleSize'括号,会发生什么? – ANG

+1

不发布您的数据的图像,他们没有帮助,因为我们无法加载图像。阅读本网站的帮助和[this](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)并编辑您的问题。 – shea

回答

0

我假设您使用我的“splitstackshape”包中的stratified

该错误解释了需要什么:命名向量(例如c(a = 5, b = 10),例如)。

但是,该函数的该功能只假定一个变量用于分层。要解决这个问题,你可以通过粘贴你的“Loc”和“Format”列来创建一个新的分组变量。

这里有一个简单的例子....

开始与原始数据集的一些样本数据,并表示要对样本大小的数据集。

library(splitstackshape) 
set.seed(1) 
mydf <- data.table(strata1 = sample(letters[1:2], 25, TRUE), 
        strata2 = sample(c("A", "B"), 25, TRUE), 
        values = sample(25, replace = TRUE)) 
head(mydf) 
# strata1 strata2 values 
# 1:  a  A  12 
# 2:  a  A  22 
# 3:  b  A  11 
# 4:  b  B  7 
# 5:  a  A  2 
# 6:  b  A  3 

wanted <- data.table(strata1 = c("a", "a", "b", "b"), 
        strata2 = c("A", "B", "A", "B"), 
        count = c(2, 3, 5, 2)) 
wanted 
# strata1 strata2 count 
# 1:  a  A  2 
# 2:  a  B  3 
# 3:  b  A  5 
# 4:  b  B  2 

为了获得输出,我们将添加一个名为“KEY”的列,将两个分层列相结合。你可以对两个数据集都这样做,但我只是简单地用“想要的”数据集来完成它。

out <- stratified(
    mydf[, KEY := paste(strata1, strata2, sep = "_")], "KEY", 
    with(wanted, setNames(count, paste(strata1, strata2, sep = "_")))) 
out 
#  strata1 strata2 values KEY 
# 1:  a  A  21 a_A 
# 2:  a  A  2 a_A 
# 3:  a  B  9 a_B 
# 4:  a  B  3 a_B 
# 5:  a  B  9 a_B 
# 6:  b  A  17 b_A 
# 7:  b  A  12 b_A 
# 8:  b  A  3 b_A 
# 9:  b  A  17 b_A 
# 10:  b  A  13 b_A 
# 11:  b  B  8 b_B 
# 12:  b  B  20 b_B 

由原始的分层变量比较所产生的样本大小:

out[, .N, .(strata1, strata2)] 
# strata1 strata2 N 
# 1:  a  A 2 
# 2:  a  B 3 
# 3:  b  A 5 
# 4:  b  B 2 
+0

谢谢你的解决方案。请耐心等待我。我收到了一个错误消息:组数是1,但提供的大小数量是46.我知道我的“想要”有46行,但我不明白组数是1。 “KEY”列也应该有46个唯一值。 –

+0

@HingingPu,你不需要一步到位。把它分成多个,看看问题出在哪里。检查,例如“KEY”列确实具有正确数量的唯一值。你的数据集是'data.table',对吗? – A5C1D2H2I1M1N2O1R2T1

+0

我终于明白了。非常感谢你! –