2016-11-23 1 views
0

는 내 원본 데이터 셋이Dplyr : 이름이 목록에있는 특정 열을 반복하는 방법은 무엇입니까?

set.seed(10) 
sample <- data_frame(group = c('A','B','C','C',NA,'D'), 
        var_hello = rnorm(6), 
        var_how = rnorm(6), 
        var_are = rnorm(6), 
        var_you = rnorm(6), 
        var_buddy = rnorm(6)) 
# A tibble: 6 × 6 
    group var_hello var_how  var_are var_you var_buddy 
    <chr>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl> 
1  A 0.01874617 -1.2080762 -0.23823356 0.9255213 -1.2651980 
2  B -0.18425254 -0.3636760 0.98744470 0.4829785 -0.3736616 
3  C -1.37133055 -1.6266727 0.74139013 -0.5963106 -0.6875554 
4  C -0.59916772 -0.2564784 0.08934727 -2.1852868 -0.8721588 
5 <NA> 0.29454513 1.1017795 -0.95494386 -0.6748659 -0.1017610 
6  D 0.38979430 0.7557815 -0.19515038 -2.1190612 -0.2537805 

처럼, 많은, 많은 var_something 변수가 보이는 dataframe 있습니다.

group_by('group')을 사용하고이 var_something 변수의 하위 집합 인 mean을 계산하지만이 하위 집합도 커질 수 있습니다. 그래서 저는 각 변수에 대해 각각 mutate을 수동으로 타이핑하기를 원하지 않습니다. 예에서

, 나는 다음 목록 내가 dplyr에 효율적으로 그를 코딩하는 방법을 잘 모릅니다 ['var_hello', 'var_are']

의 변수에 관심이 있어요. Pandas에서, 하나는 단순히 내가 자동으로 (양식 computation_var_hello의) 새로운 열 이름을 만드는 방법을

for var in ['var_hello', 'var_are']: 
sample[computation +'_' + var] = sample.groupby('group')[var].agg('mean') 

노트를 작성할 수 있습니다. dplyr에서 그 목표를 달성하는 가장 좋은 방법은 무엇입니까?

감사합니다.

+1

@ProcrastinatusMaximus 이것은 그렇지 않습니다. 여기서 문제는 제 열의 서브 세트에 대해서만 계산하고 제이크의 솔루션 인 –

답변

2

간단하게 group_bysummarize_each을 사용하여이 작업을 수행 할 수 있습니다. 그런 다음 요약 할 변수를 지정한 다음 setNames을 사용하여 이름의 접두어를 바꿉니다.

sample %>% 
    group_by(group) %>% 
    summarize_each(funs(mean), var_hello, var_are) %>% 
    setNames(gsub("var_","computation_var_",colnames(.))) 
+0

처럼 수동으로 입력하지 않아도된다는 것입니다.하지만 작동하지 않습니다. 문제는 필자가 많은 변수를 갖고 있으며 심지어 하위 목록이 매우 클 수 있다는 것입니다. 그래서 나는 그들 각각에 대해 mutate 문을 수동으로 입력하고 싶지 않다. –

+1

이 해결책은 효과가있다. –

관련 문제