dplyr的summarise_each()函数如何在同一组中对不同列子集使用多个函数进行汇总?

6
我想使用summarise_each()将多个函数应用于分组数据集。但是,我不想将每个函数应用于所有列,而是想将每个函数应用于特定的子集。我知道我可以使用summarise()指定每个列,但我有很多变量。
是否有另一种解决方案,可以避免1)使用summarise_each()然后删除不需要的列或2)保存group_by()结果,执行多个单独的summarise_each()操作并合并结果?
如果不清楚,请让我知道,我可以尝试用示例代码说明。

2
我建议你使用示例数据、示例输出和你尝试/已有的代码进行说明。 - Gopala
在这种情况下,循环遍历感兴趣的列,并使用lapply执行summarise,或者针对相应的感兴趣的列使用相应的函数使用Map - akrun
关于您的问题“1)使用summarise_each()然后删除不需要的列”,您可以在summarise_each中指定不应使用哪些列(但请注意,除非它们是分组列,否则它们将不会成为输出的一部分)。 - talat
感谢您的评论。如果我理解正确,似乎在dplyr中没有内置的方法来实现这一点。@akrun,您所说的“使用Map”是什么意思?我找不到任何有关此类函数或参数的参考资料。 - Cotton.Rockwood
1个回答

1
我建议如下:在这里,我想将min函数应用于一个变量,将max函数应用于另一个变量。然后,我只需使用分组变量将它们合并即可。
> by_species <- iris %>% group_by(Species)    

从我想应用min函数的变量开始:

min_var <- by_species %>% summarise_each(funs(min), Petal.Width) min_var 来源:本地数据框 [3 x 2]

      Species Petal.Width
       (fctr)       (dbl)
1     setosa         0.1
2 versicolor         1.0
3  virginica         1.4

我想应用max函数的变量是:

max_var <- by_species %>% summarise_each(funs(max), Sepal.Width) max_var 来源:本地数据框 [3 x 2]

     Species Sepal.Width
      (fctr)       (dbl)
 1     setosa         4.4
 2 versicolor         3.4
 3  virginica         3.8

现在,我们只需合并上面的两个表格:

left_join(min_var,max_var) 连接键: "Species" 来源: 本地数据框 [3 x 3]

      Species Petal.Width Sepal.Width
     (fctr)       (dbl)       (dbl)
1     setosa         0.1         4.4
2 versicolor         1.0         3.4
3  virginica         1.4         3.8

谢谢Rushad。这正是我在上面第(2)个选项中提到的备选方案。这就是我目前正在使用的,但还是感谢您详细的回答。+1 - Cotton.Rockwood

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接