当使用dplyr函数group_by()
并且紧接着arrange()
之后,我希望得到一个输出,其中数据框在 组中排序我在{{1}中说明}。我对文档的阅读是这种组合应该产生这样的结果,但是当我尝试它时,这不是我得到的,并且谷歌搜索没有表明其他人遇到了同样的问题。我期待这个结果我错了吗?
以下是一个示例,使用R内置数据集ToothGrowth:
group_by()
运行此操作将生成一个数据框,其中整个数据框按library(dplyr)
ToothGrowth %>%
group_by(supp) %>%
arrange(len)
排序,而不是len
因子。
这是产生所需输出的代码:
supp
答案 0 :(得分:25)
您可以通过在.by_group = TRUE
中设置arrange
来生成预期的行为:
library(dplyr)
ToothGrowth %>%
group_by(supp) %>%
arrange(len, .by_group = TRUE)
答案 1 :(得分:10)
我想你想要
ToothGrowth %>%
arrange(supp,len)
链接系统只是替换了嵌套命令,因此首先进行分组,然后对分组结果进行排序,从而打破原始排序。
答案 2 :(得分:2)
在使用group_by()
语句时修复此意外订单问题的另一种方法是将grouped_df
转换回data frame
。
摘要需要group_by,例如:
ToothGrowthMeanLen <- ToothGrowth %>%
group_by(supp, dose) %>%
summarise(meanlen = mean(len))
此摘要表未按meanlen的顺序排列
ToothGrowthMeanLen %>%
arrange(meanlen)
此摘要表按meanlen
的顺序排列ToothGrowthMeanLen %>%
data.frame() %>% # Convert to a simple data frame
arrange(meanlen)
将grouped_df
转换回数据框是我发现排序汇总data.frame的第一种方法。但事实上dplyr::ungroup
就是出于此目的。
ToothGrowthMeanLen %>%
ungroup() %>% # Remove grouping
arrange(meanlen)