2016-10-14 4 views
4

わかりましたが、私は、私はこのような何かを行うことができ、私を与えるdplyrでグループごとに異なるサイズをサブサンプルできますか?

mtcars %>% 
group_by(cyl) %>% 
sample_n(2) 

、気筒あたり

Source: local data frame [6 x 11] 
Groups: cyl [3] 

mpg cyl disp hp drat wt qsec vs am 
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 
1 21.4  4 121.0 109 4.11 2.780 18.60  1  1 
2 33.9  4 71.1 65 4.22 1.835 19.90  1  1 
3 18.1  6 225.0 105 2.76 3.460 20.22  1  0 
4 21.0  6 160.0 110 3.90 2.875 17.02  0  1 
5 15.2  8 304.0 150 3.15 3.435 17.30  0  0 
6 10.4  8 460.0 215 3.00 5.424 17.82  0  0 
# ... with 2 more variables: gear <dbl>, carb <dbl> 

ので、2つの試料を知っています。これはクールに見える。しかし、グループ化機能のユニークな要素に一致するサイズのベクトルを設定する方法があるので、4シリンダの場合はn = 1、6 cylの場合はn = 10となります。

ありがとうございます!

+0

交換の有無にかかわらずサンプルが必要ですか? – agenis

答えて

4

それぞれ個別に行い、それらをまとめてバインドします。私はあなたがdplyrですでにしていると仮定します。

bind_rows(
    mtcars %>% 
    group_by(cyl) %>% 
    filter(cyl==4) %>% 
    sample_n(1), 
    mtcars %>% 
    group_by(cyl) %>% 
    filter(cyl==6) %>% 
    sample_n(6)) 

のみ6がありますので、私たちは、CYLの== 6の10行を行うことはできません。)

+0

True!私のせいだよ。答えは –

+0

ありがとう! –

+0

いいえ問題@DavidMas!ちょうどFYI、これらの2つのコメントはスタックオーバーフロー(彼らは膨らみを促進し、物質を追加しません)でお勧めしません。あなたの+1と受け入れられた回答は十分にありがとうございます! –

1

これは、1つのチャンクでそれをしない:

require(dplyr) 
require(tidyr) 
require(purrr) 

mtcars %>% 
    nest(-cyl) %>% 
    mutate(Sample = map2(data, cyl, sample_n)) %>% 
    unnest(Sample) 
+2

非常にいいですが、サンプルサイズが 'cyl'であると仮定します。より一般的な解決策は、ネストの 'ステップ'の後に、サンプルグループを含むdata.frameをcylグループで結合することです。 – jlesuffleur

関連する問題