2017-09-26 2 views
1

나는 mutate와 summarize 사이에 무언가를하고 싶습니다.원본 요약에 출력 요약 요약

그룹에 대한 요약 통계는 계산하지만 원래 데이터는 중첩 된 개체로 유지하고 싶습니다. 이것은 꽤 일반적인 작업이라고 가정하지만, 두 번 그룹화하는 것뿐만 아니라 조인을 호출하지 않고 수행하는 방법을 이해할 수는 없습니다. 아래 예제 코드 :

mtcars %>% 
    group_by(cyl) %>% 
    nest() %>% 
    left_join(mtcars %>% 
       group_by(cyl) %>% 
       summarise(mean_mpg = mean(mpg))) 

원하는 출력을 생성 :

# A tibble: 3 x 3 
    cyl    data mean_mpg 
    <dbl>    <list> <dbl> 
1  6 <tibble [7 x 10]> 19.74286 
2  4 <tibble [11 x 10]> 26.66364 
3  8 <tibble [14 x 10]> 15.10000 

하지만이이 작업을 수행하기 위해 "올바른"방법이 아니다 느낌.

답변

2

join없이이 작업을 수행하는 방법 중 하나입니다.

mtcars %>% 
    group_by(cyl) %>% 
    nest() %>% 
    mutate(mean_mpg = map_dbl(data, ~ mean(.x$mpg))) 

# A tibble: 3 x 3 
# cyl    data mean_mpg 
# <dbl>    <list> <dbl> 
#1  6 <tibble [7 x 10]> 19.74286 
#2  4 <tibble [11 x 10]> 26.66364 
#3  8 <tibble [14 x 10]> 15.10000 

또는 : data 열에서 중첩 mpg의 평균을 계산하는 purrr 패키지합니다 (tidyverse 가족의 한 구성원)에서 (아웃과 map 유형 double의 벡터가 될 올 본질적입니다) map_dbl를 사용하여 당신은 중첩 전에 mean_mpg을 계산하고 그룹 변수의 하나로서 mean_mpg을 추가 할 수 있습니다

mtcars %>% 
    group_by(cyl) %>% 
    mutate(mean_mpg = mean(mpg)) %>% 
    group_by(mean_mpg, add=TRUE) %>% 
    nest() 

# A tibble: 3 x 3 
# cyl mean_mpg    data 
# <dbl> <dbl>    <list> 
#1  6 19.74286 <tibble [7 x 10]> 
#2  4 26.66364 <tibble [11 x 10]> 
#3  8 15.10000 <tibble [14 x 10]>