1. ホーム
  2. r

[解決済み] data.tableのカラムを(コピーせずに)並べ替える方法

2022-06-11 20:41:39

質問

のカラムを並べ替えたいのですが、どうすればいいですか? data.table x は、列名の文字ベクトルが与えられる。 neworder :

library(data.table)
x <- data.table(a = 1:3, b = 3:1, c = runif(3))
neworder <- c("c", "b", "a")

明らかにできた。

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

しかし、その場合、データセット全体を再度コピーする必要があります。 他の方法はないでしょうか。

どのように解決するのですか?

使用方法 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

から ?setcolorder :

data.table 言ってみれば、すべて set* 関数は、参照によって入力を変更する。つまり、1列分の大きさの一時的なワーキングメモリを除いて、コピーは全く行われない。

ということで、かなり効率的なはずです。 ?setcolorder をご覧ください。