【问题标题】:Does the order in which the dplyr functions,used in pipeline matters?管道中使用的 dplyr 函数的顺序是否重要?
【发布时间】:2015-03-27 14:03:31
【问题描述】:

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

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

产生与此不同的结果:

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

谁能解释这个原因,如果有任何特定的顺序需要定义,请提及。 谢谢

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

【问题讨论】:

  • 我很困惑:当然顺序很重要。 dplyr 在这方面与任何其他代码(在顺序执行的编程语言中)没有什么不同。是什么让您认为订单无关紧要?

标签: r dplyr


【解决方案1】:

是的,顺序很重要。

管道相当于:

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

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

【讨论】:

    【解决方案2】:

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

    一个副作用是您可以创建复杂而长的管道,您可以在其中控制操作顺序(通过将它们定位在管道的右侧部分),并且您无需在操作完成后启动新管道.

    【讨论】:

      猜你喜欢
      • 2016-04-21
      • 2019-11-18
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多