Создание порядка сортировки в 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)),]