0

マージする簡単な行列(またはdf)が2つあります。

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)


問題ありません:列1でソートした後、列1は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


しかし、待ってください。2つの列(両方とも数値)をマージすると、並べ替え順序が突然アルファベットのように見えます。

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

ええと、グロス。どうしたの?そして、私は何をしますか?

4

1 に答える 1

2

@joran のコメントに基づいて、行を特定の順序で並べ替えたい場合は、明示的に自分で設定する必要があるようです。

行の値が 1 つ以上の列の値が増加する順序が必要な場合は、次のように関数を使用できますorder()

X <- merge(a, b, by = c("one", "two"))
X[with(X, order(one, two)),]
于 2012-11-09T20:41:35.933 に答える