Создание порядка сортировки в merge() числовой

У меня есть две простые матрицы (или DF) для объединения:

a <- cbind(one=0:15, two=0:15, three=0:15)
b <- cbind(one=0:15, two=0:15, three=0:15)
#a <- data.frame(one=0:15, two=0:15, three=0:15)
#b <- data.frame(one=0:15, two=0:15, three=0:15)


Нет проблем: после сортировки по первому столбцу первый столбец выводится в порядке возрастания от 0 до 15:

merge(a,b,by=c("one"), sort=T)
   one two.x three.x two.y three.y
1    0     0       0     0       0
2    1     1       1     1       1
3    2     2       2     2       2
4    3     3       3     3       3
5    4     4       4     4       4
6    5     5       5     5       5
7    6     6       6     6       6
8    7     7       7     7       7
9    8     8       8     8       8
10   9     9       9     9       9
11  10    10      10    10      10
12  11    11      11    11      11
13  12    12      12    12      12
14  13    13      13    13      13
15  14    14      14    14      14
16  15    15      15    15      15


Но подождите: при объединении двух столбцов - обоих числовых - порядок сортировки внезапно кажется буквенным.

merge(a,b,by=c("one", "two"), sort=T)
   one two three.x three.y
1    0   0       0       0
2    1   1       1       1
3   10  10      10      10
4   11  11      11      11
5   12  12      12      12
6   13  13      13      13
7   14  14      14      14
8   15  15      15      15
9    2   2       2       2
10   3   3       3       3
11   4   4       4       4
12   5   5       5       5
13   6   6       6       6
14   7   7       7       7
15   8   8       8       8
16   9   9       9       9

Фууу, брутто. В чем дело? И что мне делать?

1 ответ

Решение

Судя по комментариям @joran, похоже, что если вы хотите, чтобы строки сортировались в каком-то определенном порядке, вы должны явно установить это самостоятельно.

Если вам нужен порядок, в котором строки имеют растущие значения одного или нескольких столбцов, вы можете использовать функцию order(), как это:

X <- merge(a, b, by = c("one", "two"))
X[with(X, order(one, two)),]
Другие вопросы по тегам