在merge()数字中进行排序

时间:2012-11-09 20:30:33

标签: r sorting merge lexicographic

我有两个简单的矩阵(或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 个答案:

答案 0 :(得分:2)

基于@joran的评论,看起来如果您希望按任何特定顺序对行进行排序,您应该自己明确设置它。

如果您想要的订单是行中某个或多个列的值增加的订单,则可以使用函数order(),如下所示:

X <- merge(a, b, by = c("one", "two"))
X[with(X, order(one, two)),]