我有很多用dplyr 0.4.3编写的代码,它依赖于分组的arrange()函数。截至0.5版本,安排不再适用分组。
这个决定令我感到困惑,因为这使得arrange()与其他dplyr谓词不一致,如果需要ungrouped,用户可以在arrange()之前取消组合()。我希望也许在arrange()中有一个参数来保留groups_by行为,但是唉!
因此,我必须改写我的分组安排。此时,我唯一的选择似乎是在排列调用中拆分管道,循环遍历组并按组排列,然后再次绑定()结果。我希望有更优雅的解决方案吗?下面是一个MRE,我想在wt per group_by(cyl)上运行一个cumsum。非常感谢您的想法/建议。
library(dplyr)
mtcars %>%
group_by(cyl) %>%
arrange(desc(mpg)) %>%
mutate(WtCum = cumsum(wt))
答案 0 :(得分:6)
要在dplyr 0.5中的组内进行排序,请在arrange
中的其他排序变量之前添加分组变量。
mtcars %>%
group_by(cyl) %>%
arrange(cyl, desc(mpg))
答案 1 :(得分:1)
如果您想保留“ dates=$(date +%Y_%m_%d);
hive -e "use mydb; create table if not exists tab_${dates} (id int);"
”字样,可以使用this snippet:
arrange
这将通过基本在组变量之前进行新的arrange_old <- function(.data, ...) {
dplyr::arrange_(.data, .dots = c(groups(.data), lazyeval::lazy_dots(...)))
}
调用来尊重分组。
那么您可以做:
arrange
对于它的价值,我还发现此更改令人困惑且不直观,而且我一直犯着忘记忘记明确指定分组的错误。