Mic*_*ael 107 r data.table
data.table x鉴于列名称的字符向量,我想重新排序我的列neworder:
library(data.table)
x <- data.table(a = 1:3, b = 3:1, c = runif(3))
neworder <- c("c", "b", "a")
Run Code Online (Sandbox Code Playgroud)
显然我可以这样做:
x[ , neworder, with = FALSE]
# or
x[ , ..neworder]
# c b a
# 1: 0.8476623 3 1
# 2: 0.4787768 2 2
# 3: 0.3570803 1 3
Run Code Online (Sandbox Code Playgroud)
但这需要再次复制整个数据集.还有另一种方法吗?
Cha*_*ase 166
用途setcolorder():
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
Run Code Online (Sandbox Code Playgroud)
来自?setcolorder:
用
data.table说法,所有set*函数都通过引用来改变它们的输入.也就是说,除了临时工作存储器之外,根本不会复制任何副本,而临时工作存储器与一列一样大.
所以应该非常有效率.详情?setcolorder请见.
人们可能会发现使用上述解决方案更容易,而是按列号排序.例如: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(3,2,1))
> x
c b a
[1,] 0.2880365 3 1
[2,] 0.7785115 2 2
[3,] 0.3297416 1 3
Run Code Online (Sandbox Code Playgroud)