我有一個data.table,鍵爲x
和y
,我想按每個鍵內的列z
排序。按每個鍵內的一列對data.table進行排序
> DT
x y z
1: a a 0.5526312
2: a a 0.6339102
3: a a -0.7490821
4: a a -0.6850176
5: a a 1.7943156
6: a b 0.9271090
7: a b 1.3936642
8: a b 1.4815404
9: a b -0.7850981
10: a b -1.0487700
11: b c 1.5184297
12: b c -0.4640705
13: b c -0.6513462
14: b c -0.5568319
15: b c 1.5422990
16: b d 0.8810654
17: b d -0.1895812
18: b d -2.6263378
19: b d 0.7371594
20: b d 1.4122076
我第一次嘗試是DT[order(z), .SD, by = list(x, y)]
,但是,這不守排序鍵列。我知道我可以在兩個步驟做:
DT <- DT[order(x, y, z)]
setkeyv(DT, c('x', 'y'))
然而,這似乎不是一個很好的做法,因爲你希望當按鍵被排序的列z
仍將保持排序。我也不想將z
設置爲關鍵字,因爲它以後不會用作關鍵字。有沒有更好的方法來實現這個目標?
如果您將鍵保留爲「x,y,z」,問題究竟是什麼? – Arun
@阿倫:這可能不成問題。我可能會加入這個data.table與其他data.table只有x和y鍵,所以我認爲這可能是一個好主意,保持簡單。 – ezbentley