r语言 - dplyr 的排列函数使用什么排序算法?



我有一个数据集,我们在其中引入一个值的数据帧,并为每个值分配一个数字1-5。然后,我们将使用dplyr::arrange根据此列对这些值进行排序。

通过查看结果数据,很明显,除了按1-5列中的数字排序外,行的原始顺序还会影响最终顺序。然而,我不知道是什么影响了每组中的行顺序。

为此,我一直在努力寻找dplyr的排列函数使用的排序算法——然而,我在这里或文档中找不到它。如有任何帮助,将不胜感激

文档不会告诉您,也不能保证订单在关系中得到保留。这意味着你不应该对关系中的行为承担任何责任。

你所应该假设的是,事情是按照文档所说的顺序排列的。如果违反了这一点,那就是一个错误。如果文档没有说明会发生什么,那么你应该假设今天发生的事情明天可能会有所不同。

很容易将任何排序转换为稳定排序(在关系中保持原始排序(。只需添加一个包含原始位置的额外列,并将其作为断开连接的最后一列。例如,

dplyr::arrange(mtcars, carb)

没有说明具有相同值CCD_ 1的行内的顺序。但是

dplyr::arrange(data.frame(i = 1:nrow(mtcars), mtcars), carb, i)[-1]

保证原始订单保持在CCD_ 2值内。

代码显示它最终使用默认方法调用base::order,因此:

method: the method to be used: partial matches are allowed.  The
default (‘"auto"’) implies ‘"radix"’ for short numeric
vectors, integer vectors, logical vectors and factors.
Otherwise, it implies ‘"shell"’.  For details of methods
‘"shell"’, ‘"quick"’, and ‘"radix"’, see the help for ‘sort’.

不过,它确实首先通过vctrs::vec_proxy_order——不确定这是否重要。

最新更新