dplyr 在管道中使用的功能顺序是否重要?

Does the order in which the dplyr functions,used in pipeline matters?

我注意到 dplyr 在管道中使用时的运行顺序会影响结果。例如:

iris %>%   
  group_by(Species) %>%   
     mutate(Sum = sum(Sepal.Length))

产生与此不同的结果:

iris %>% 
  mutate(Sum = sum(Sepal.Length)) %>%
     group_by(Species)  

谁能解释一下这是为什么,如果有任何必须定义的特定顺序,请说明。 谢谢

仅供参考:iris 是 R 中的内置数据集,使用 data(iris) 加载它。我试图添加一个新列,每个物种的萼片长度总和。

是的,顺序很重要,因为管道的每个部分都是单独评估的,从第一个管道部分到最后一个管道部分,并且前一个管道(或原始数据集)的结果通过管道传递给接下来是管道部分。这意味着,如果您像示例中那样在 mutate 之后使用 group_by ,则 mutate 将在不分组的情况下完成。

一个副作用是您可以创建复杂而长的管道,您可以在其中控制操作顺序(通过将它们放置在管道的右侧)并且您不需要在操作后启动新管道完成了。

是的,顺序很重要。

管道相当于:

iris<-group_by(iris, Species) iris<-mutate(iris, Sum = sum(Sepal.Length))

如果你改变了顺序,你就改变了结果。如果你首先按物种分组,你将得到按物种总和的结果(我想这就是你想要的)。 但是,如果您在总和后按物种分组,则此总和将对应于所有物种萼片长度的总和。