2016-11-23 2 views
0

У меня есть dataframe, который выглядит, как этот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 переменных.

Я хотел бы group_by('group') и вычислить mean подмножества этих var_something переменных, но даже это подмножество может быть большим. Поэтому я не хочу прибегать к набору вручную каждый mutate для каждой переменной.

В примере, я заинтересован в переменных в следующем списке ['var_hello', 'var_are']

Я не знаю, как эффективно кодировать, что в dplyr. В Pandas, можно было бы просто написать

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

Обратите внимание, как я могу автоматически создать новые имена столбцов (вида computation_var_hello). Каков наилучший способ достичь этого в dplyr?

Большое спасибо!

+1

@ProcrastinatusMaximus это не тот случай. Здесь задача только вычислить что-то для подмножества моих столбцов И не нужно вводить их все вручную, как в решении Jake –

ответ

2

Вы можете сделать это, используя group_by и summarize_each. Затем вы указываете, какие переменные вы хотите суммировать, затем замените префикс в именах, используя setNames.

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

спасибо, но это не работает. Проблема в том, что у меня много переменных, и даже мой список подмножеств может быть очень большим. Поэтому я не хочу вручную вводить инструкцию mutate для каждого из них. –

+1

Это решение должно работать –

Смежные вопросы