R 如何对data.table列重新排序(无需复制)

R 如何对data.table列重新排序(无需复制),r,data.table,R,Data.table,我想对我的数据表中的列重新排序。给定列名称的字符向量,neworder: library(data.table) x <- data.table(a = 1:3, b = 3:1, c = runif(3)) neworder <- c("c", "b", "a") library(data.table) x <- data.table(a = 1:3, b = 3:1, c = runif(3)) x # a b c # [1,] 1 3 0.28

我想对我的
数据表中的列重新排序。给定列名称的字符向量,
neworder

library(data.table)
x <- data.table(a = 1:3, b = 3:1, c = runif(3))
neworder <- c("c", "b", "a")
library(data.table)
x <- data.table(a = 1:3, b = 3:1, c = runif(3))
x
#      a b         c
# [1,] 1 3 0.2880365
# [2,] 2 2 0.7785115
# [3,] 3 1 0.3297416
setcolorder(x, c("c", "b", "a"))
x
#              c b a
# [1,] 0.2880365 3 1
# [2,] 0.7785115 2 2
# [3,] 0.3297416 1 3
但这需要再次复制整个数据集。还有其他方法吗?

使用
setcolorder()

库(data.table)

x人们可能会发现使用上述解决方案更容易,而不是按列数排序。例如: 库(数据表)

>x
a、b、c
[1,] 1 3 0.2880365
[2,] 2 2 0.7785115
[3,] 3 1 0.3297416
>定色器(x,c(3,2,1))
>x
c b a
[1,] 0.2880365 3 1
[2,] 0.7785115 2 2
[3,] 0.3297416 1 3

小说明:
setcolorder
在不使用任何工作内存的情况下移动列指针。“关于使用一列大小的工作记忆的那句话实际上是关于设置键的。@MatthewDowle-谢谢你的澄清。”。我有点认为可能是这样,但不是100%确定。我可以为列的子集这样做吗?例如,当我只想移动到前面的列时?
setcolorder(df,c(“someCol”,colnames(dt)[!(colnames(dt)%in%c(“someCol”))))
@PeterPan另请参见:“
setcolorder()
现在接受移动到前面的列少于
ncol(dt)
通常不鼓励按数字引用列,在data.table和其他地方。data.table常见问题解答在此处的第一项中对此进行了论证:
library(data.table)
x <- data.table(a = 1:3, b = 3:1, c = runif(3))
x
#      a b         c
# [1,] 1 3 0.2880365
# [2,] 2 2 0.7785115
# [3,] 3 1 0.3297416
setcolorder(x, c("c", "b", "a"))
x
#              c b a
# [1,] 0.2880365 3 1
# [2,] 0.7785115 2 2
# [3,] 0.3297416 1 3
    > x <- data.table(a = 1:3, b = 3:1, c = runif(3))
    > x
         a b         c
    [1,] 1 3 0.2880365
    [2,] 2 2 0.7785115
    [3,] 3 1 0.3297416
    > setcolorder(x, c(3,2,1))
    > x
         c         b a
    [1,] 0.2880365 3 1
    [2,] 0.7785115 2 2
    [3,] 0.3297416 1 3