2016-10-14 2 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> 

때문에이 개 샘플을 알고있다. 멋지다. 그러나 그룹화 기능의 고유 한 요소와 일치하는 크기의 벡터를 설정하여 4 실린더의 n = 1, 6 cyl의 n = 10 등을 얻을 수 있습니다.

감사합니다.

+0

대체품이 있거나없는 샘플을 원하십니까? – agenis

답변

4

개별적으로 수행 한 다음 함께 바인딩하십시오. 나는 당신이 dplyr 이미있어 가정에만 6가 있기 때문에 우리는 CYL의 == 6의 10 개 행을 할 수없는

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

)

+0

사실! 내 잘못은 하하 –

+0

답에 감사드립니다! –

+0

문제 없음 @DavidMas! 그냥 참고하시기 바랍니다,이 두 가지 의견은 스택 오버플로 (그들은 팽창을 촉진하고 물질을 추가하지 않습니다)에 낙담됩니다. +1 및 답변에 대한 답변이 충분합니다. –

1

이 한 덩어리에 작업을 수행합니다

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

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

아주 좋지만 샘플 크기는 'cyl'라고 가정합니다. 더 일반적인 해결책은 둥지'step' 후에 cyl 그룹에 의해 샘플 크기를 포함하는 data.frame에 참여하는 것입니다. – jlesuffleur

관련 문제