【问题标题】:dplyr summarise_each() using multiple functions for different column subsets across the same groupsdplyr summarise_each() 对同一组中的不同列子集使用多个函数
【发布时间】:2017-12-16 15:33:10
【问题描述】:

我想使用summarise_each() 将多个函数应用于分组数据集。但是,我不想将每个函数应用于 all 列,而是将每个函数应用于特定的子集。我意识到我可以通过使用summarise() 指定每一列来做到这一点,但我有很多变量。

对于 1) 使用 summarise_each() 然后删除不需要的列或 2) 保存 group_by() 结果,执行多个单独的 summarise_each() 操作并合并结果,是否有替代解决方案?

如果不清楚,请告诉我,我可以尝试用一些示例代码来说明。

【问题讨论】:

  • 我建议您使用示例数据、示例输出和您尝试/拥有的代码进行说明。
  • 在这种情况下,遍历感兴趣的列并使用lapply 执行summarise 或将Map 与相应的感兴趣列的相应函数一起使用
  • 关于您的问题“1) 使用 summarise_each() 然后删除不需要的列”您可以在 summarise_each 中指定不应使用哪些列(但请注意,它们不会成为输出的一部分然后除非他们对列进行分组。
  • 感谢 cmets。如果我理解正确的话,听起来dplyr 中没有内置的方法可以做到这一点。 @akrun,使用Map 是什么意思?我找不到对此类函数或参数的任何引用。

标签: r dplyr


【解决方案1】:

我建议如下:在这里,我想将 min 函数应用于一个变量,将 max 函数应用于另一个变量。然后我简单地将它们与分组变量合并。

> by_species <- iris %>% group_by(Species)    

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

min_var % 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 % summarise_each(funs(max), Sepal.Width) 最大变量 来源:本地数据框[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) 加入:“物种” 来源:本地数据框[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

【讨论】:

  • 谢谢拉沙德。这正是我在上面的选项 (2) 中提到的替代解决方案。这是我目前正在使用的,但感谢您的详细回复。 +1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-07
  • 2018-07-06
  • 2020-01-10
  • 2020-01-12
  • 2013-12-25
  • 1970-01-01
相关资源
最近更新 更多