2013-02-22 8 views

答えて

11

これはどう:

mydf[ sample(which(mydf$gender=='F'), round(0.2*length(which(mydf$gender=='F')))), ] 

0.2はあなたの20%であるとlength(which(mydf$gender=='F'))が20%をサンプルにF

+2

1が、20%は他のものになることを気にしない:あなたは、各性別グループ内の20%をサンプリングしたい場合

mydf %>% sample_frac(.2) 

整数よりも大きいので、ラウンドを使用する必要があります。 –

+1

良い点、ありがとう、私はそれを追加しました。ちなみに、あなたはあなたの答えにカンマと閉じた角括弧がありません。 – Ben

1

と行の合計数である、あなたがサンプルサイズを取得するためにこれを使用することができます:

n = round(0.2 * nrow(mydf[mydf$gender == "F",])) 
+0

ええ、私はそれを行うことができましたが、これは自動化され、だから私は本当に行くことはできませんし、w/oを別の関数を書くと値を調整する場合は、他のステートメント。 – ATMathew

+3

これはあなたの質問に対する答えです。あなたの質問が異なる場合は、より詳細に編集してください。 –

+0

誰でもダウンボートにコメントしてもらえますか?この答えは質問に正確に答えます。 –

2

自己宣伝の警告。私は便利な層別サンプリングを可能にする関数を書いていました。サンプリングする前にグループ化変数からレベルをサブセット化するオプションを追加しました。

機能がstratifiedと呼ばれ、次のように使用することができます。

set.seed(1) 
# Proportional sample 
stratified(mydf, group="gender", size=.2, select=list(gender = "F")) 
# gender age 
# 4  F 29 
# Fixed-size sampling 
stratified(mydf, group="gender", size=2, select=list(gender = "F")) 
# gender age 
# 4  F 29 
# 5  F 31 

あなたのデータフレームは、「状態」変数を含め、あなたは "によってグループに望んでいた場合は、例えば(複数のグループを指定することができますあなたはgroup = c("state", "gender")と指定します)。複数の「選択」引数を指定することもできます(たとえば、カリフォルニア州とテキサス州の女性回答者のみを希望し、州の変数に2文字の州略語を使用する場合はselect = list(gender = "F", state = c("CA", "TX"))と指定できます)。

機能自体はhere見つけることができるか、以下のように、あなたは「デベロッパーツール」パッケージからinstall_githubを使用して(あなたのヘルプページと例への便利なアクセスを提供します)パッケージをダウンロードし、インストールすることができます。

# install.packages("devtools") 
library(devtools) 
install_github("mrdwabmisc", "mrdwab") 
5

パッケージにsample_frac()機能を使用できます。

あなたは、各グループ内の20%をサンプリングする場合:

mydf %>% group_by(gender) %>% sample_frac(.2) 
関連する問題