2017-10-09 18 views
-1

私はかなりRに慣れています。サンプルサイズがグループに基づいて変化すると、層別サンプリングに悩まされています。層別サンプリングサイズはグループに応じて異なりますR

データは次のようになります。

enter image description here

とサンプルサイズが異なるグループや階層によって異なります:

enter image description here

私は層化抽出を使用しますが、理解することはできませんサンプルサイズを外します。

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

「サイズは名前付きベクトルとして入力する必要があります」というエラーメッセージが表示されます。誰でも助けてくれますか?ありがとうございました。

+0

何が起こりますか? – ANG

+1

あなたのデータの画像を掲載していませんが、私たちは画像を読み込めないので役に立ちません。このサイトのヘルプと[this](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)を読み、質問を編集してください。 – shea

答えて

0

stratifiedを私の "splitstackshape"パッケージから使用しているとします。

エラーは、名前付きベクトル(たとえば、c(a = 5, b = 10)のようなもの)が必要であることを説明します。

ただし、この機能の機能は、階層化に使用される変数が1つしかないことを前提としています。これを修正するには、「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 

出力を取得するには、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 

は、元の層化変数によって得られた試​​料の大きさの比較:あなたは `人口$ SampleSize`後の括弧を削除すると

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

@HuayingPu、あなたは一度にすべてを行う必要はありません。それを複数に分割し、問題がどこにあるかを見てください。たとえば、「KEY」列が正しい数の一意の値を持っているかどうかを確認します。あなたのデータセットは 'data.table'です、正しいですか? – A5C1D2H2I1M1N2O1R2T1

+0

私はそれを得ました。どうもありがとうございました! –

関連する問題