2017-10-09 91 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

我終於明白了。非常感謝你! –