gpt4 book ai didi

r - 是否存在 `setorder` 的版本,其行为类似于 `setcolorder`

转载 作者:行者123 更新时间:2023-12-01 08:21:43 28 4
gpt4 key购买 nike

我想根据给定的索引序列重新排序 data.table 的行,这就是 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

最佳答案

neworder should be the "lookup index" of the new ordering, e.g. neworder = c(3, 1, 2) gives the 3rd row as the new first row, the 1st row as the new second row, etc...

# 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

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

如果 .I 的行为发生如下所述的变化,则可能需要在以后的版本中使用 1:.N:https://github.com/Rdatatable/data.table/issues/2598

关于r - 是否存在 `setorder` 的版本,其行为类似于 `setcolorder`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56759013/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com