首页 > 解决方案 > 我们可以按组使用 data.table setorder 吗?

问题描述

简单的问题:

我想data.table::setorder在我的 DT 上使用,但我不能按组执行此操作。可能吗 ?

在这个例子中,我订购了我的整个 DT :

DT = data.table(a=rep(c('C', 'A', 'D', 'B', 'E'), each = 4), b=sample(1:1000,20))
setorder(DT, b)
DT

但我想保持固定。

谢谢 !

标签: rdata.table

解决方案


你的意思是像下面这样的吗?

> DT[, .SD[order(b)], a]
    a   b
 1: C 129
 2: C 679
 3: C 836
 4: C 930
 5: A 270
 6: A 299
 7: A 471
 8: A 509
 9: D 187
10: D 307
11: D 597
12: D 978
13: B 277
14: B 494
15: B 874
16: B 950
17: E 330
18: E 591
19: E 775
20: E 841

> DT[, setorder(.SD, b), a]
    a   b
 1: C 129
 2: C 679
 3: C 836
 4: C 930
 5: A 270
 6: A 299
 7: A 471
 8: A 509
 9: D 187
10: D 307
11: D 597
12: D 978
13: B 277
14: B 494
15: B 874
16: B 950
17: E 330
18: E 591
19: E 775
20: E 841

推荐阅读