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