merge函数为何重排行数据?其重排机制是怎样的?
关于
merge()函数行顺序变化的核心解释 为什么merge()会改变行顺序?
merge()默认会对连接键(即用于匹配行的列,未指定by时自动取两个数据框的共同列)做排序,这是为了优化连接效率——基于有序键的匹配算法能大幅提升大数据框的处理速度,是底层实现时的性能优先选择。
具体的重排规则
- 优先按照连接键的升序对结果行进行整体排序
- 对于连接键值相同的行组,会保留它们在第一个输入数据框(
x)中的相对出现顺序 - 如果使用全连接(
all=TRUE),第二个数据框(y)中独有的键值组,会被放在对应排序位置,组内保留y中的原有顺序
举个直观的例子:
假设数据框x:
id val_x 2 a 1 b 3 c
数据框y:
id val_y 3 x 1 y
执行默认的merge(x, y)后,结果会按id升序排列:
id val_x val_y 1 b y 2 a <NA> 3 c x
如果想跳过排序保留原顺序,其实可以给merge()加sort=FALSE参数,结果会按x中id的原有顺序输出。
内容的提问来源于stack exchange,提问作者Vincent
相关产品推荐
相关产品推荐

