R,dplyr - group_by()和arrange()的组合不会产生预期的结果?

Hrv*_*oje 27 r dplyr

当使用dplyr函数group_by()并且之后立即使用时arrange(),我希望得到一个输出,其中数据帧我所声明的组排序group_by().我对文档的阅读是这种组合应该产生这样的结果,但是当我尝试它时,这不是我得到的,并且谷歌搜索没有表明其他人遇到了同样的问题.期待这个结果我错了吗?

这是一个例子,使用R内置数据集ToothGrowth:

library(dplyr)
ToothGrowth %>%
  group_by(supp) %>%
  arrange(len)
Run Code Online (Sandbox Code Playgroud)

运行此操作将生成一个数据框,其中整个数据框按照len而不是在supp因子内排序.

这是产生所需输出的代码:

ToothGrowth %>%
  group_by(supp) %>%
  do( data.frame(with(data=., .[order(len),] )) )
Run Code Online (Sandbox Code Playgroud)

Dav*_*ger 37

您可以产生通过设置预期的行为.by_group = TRUEarrange:

library(dplyr)
ToothGrowth %>%
    group_by(supp) %>%
    arrange(len, .by_group = TRUE)
Run Code Online (Sandbox Code Playgroud)

  • FWIW这是给定问题时我正在寻找的答案。 (2认同)

Jer*_*myS 10

我想你想要的

ToothGrowth %>%
  arrange(supp,len)
Run Code Online (Sandbox Code Playgroud)

链接系统只是替换嵌套命令,因此首先进行分组,然后对分组结果进行排序,从而打破原始排序.

  • 谢谢你的建议.虽然它修复了我的特定问题,但我认为它不适用于您可能希望保留原始`supp`变量的顺序的更一般情况. (4认同)
  • 我想做到这一点,为什么它不能按照你认为应该的方式工作(即首先分组,然后安排) (2认同)