2017-10-10 4 views
1

를 사용하여 그룹화 된 모든 기능에 기능을 적용하는 효율적인 방법 :R - 우리의 테스트 데이터 프레임 수 <code>df</code>하자 plyr

df %>% 
    group_by(id) %>% 
    summarise(sum_var_1 = sum(var1), 
      sum_var_2 = sum(var2), 
      sum_var_3 = sum(var3)) %>% 
    data.frame 

    id sum_var_1 sum_var_2 sum_var_3 
1 1   0   2   1 
2 2   2   0   2 
3 3   2   1   2 
:

set.seed(1) 
df <- data.frame(id = c(1,1,2,2,3,3,3), 
       var1 = round(runif(7)), 
       var2 = round(runif(7)), 
       var3 = round(runif(7))) 
df 

    id var1 var2 var3 
1 1 0 1 1 
2 1 0 1 0 
3 2 1 0 1 
4 2 1 0 1 
5 3 0 0 0 
6 3 1 1 1 
7 3 1 0 1 

내가 아이디를 통해 요약하고이 같은 모든 값을 요약 할

이제 질문 : sum_var_2 = sum(var2) [...] 단계를 피하고 기능적으로 summarise 내부에 기능적으로 수행 할 수 있습니까? 요약하면 수백 가지 기능이 있습니다.

도움이 될 것입니다!

답변

2

모든 변수 "VAR"로 시작하기 때문에 당신이 당신의 예를 반환

df %>% 
    group_by(id) %>% 
    summarise_at(vars(starts_with("var")), sum) 

을 할 수 있습니다.

편집 : 제이크-KAUPP 댓글을 달았 @summarise_all 정상화 할 변수 이름을 필요로하지 않습니다 더 나은 또한 일을 같이

df %>% 
    group_by(id) %>% 
    summarise_all(sum) 
+2

또한 제외한 모든 요약되는'summarise_all'을 사용할 수 있습니다 그룹화 변수. –