是否有类似“setcolorder”的“setorder”版本

Jam*_*orn 3 r data.table

我想data.table根据给定的索引序列对 a 的行重新排序,这就是setcolorder列的作用。有这个功能吗?

这是一个可重现的示例,具有预期的输出。

> DT = data.table(mtcars, keep.rownames=TRUE)[1:3]
> DT
              rn  mpg cyl disp  hp drat    wt  qsec vs am gear carb
1:     Mazda RX4 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
2: Mazda RX4 Wag 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
3:    Datsun 710 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1

> ord = c(3,1,2)
> setroworder(DT, ord)
> DT
              rn  mpg cyl disp  hp drat    wt  qsec vs am gear carb
1:    Datsun 710 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
2:     Mazda RX4 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
3: Mazda RX4 Wag 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Run Code Online (Sandbox Code Playgroud)

Fra*_*ank 5

neworder 应该是新排序的“查找索引”,例如 neworder = c(3, 1, 2) 将第 3 行作为新的第一行,将第 1 行作为新的第二行,等等......

# example
DT = data.table(mtcars, keep.rownames=TRUE)[1:3]
ord = c(3,1,2)

DT

              rn  mpg cyl disp  hp drat    wt  qsec vs am gear carb 
1:     Mazda RX4 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4   
2: Mazda RX4 Wag 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4   
3:    Datsun 710 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1   

# use DT[ord, do_stuff]:
setorderv(DT[ord, .rn := .I], ".rn")[]

              rn  mpg cyl disp  hp drat    wt  qsec vs am gear carb .rn
1:    Datsun 710 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1   1
2:     Mazda RX4 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4   2
3: Mazda RX4 Wag 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4   3
Run Code Online (Sandbox Code Playgroud)

正如评论中所指出的,我认为摆脱捕获行排序的列是一个坏主意,但您可以制作一个包装器来摆脱它,就像在其他答案中一样。

1:.N如果.I此处讨论的更改行为,则可能需要在未来版本中使用:https : //github.com/Rdatatable/data.table/issues/2598