Dplyr:如何循环名称在列表中的特定列?

时间:2016-11-23 16:01:13

标签: r 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 个答案:

答案 0 :(得分:2)

您只需使用group_bysummarize_each即可。然后指定要汇总的变量,然后使用setNames替换名称中的前缀。

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