オプション1
多分あなたは使うことができますsetdiff
:
DT <- data.table(A = 1:2, B = 3:4, X = 5:6)
DT
# A B X
# 1: 1 3 5
# 2: 2 4 6
setcolorder(DT, c("X", setdiff(names(DT), "X")))
DT
# X A B
# 1: 5 1 3
# 2: 6 2 4
オプション 2
アプローチの修正版を使用する:
setcolorder(DT, c("X", names(DT)[1:(length(DT)-1)]))
また
setcolorder(DT, c(length(DT), 1:(length(DT)-1)))
なぜあなたのアプローチのエラーですか?列名と数値列インデックスの両方を含めようとしました。両方ではなく、どちらか一方を使用してください。
オプション 3
と呼ばれる関数を作成しましたmoveme
(当面は、この Gistまたは私のブログで見つけることができます)。セミコロンで区切られた一連の「移動」コマンドを入力します。これにより、列をかなり柔軟にシャッフルできます。
DT <- data.table(matrix(1:20, ncol = 10, dimnames = list(NULL, LETTERS[1:10])))
DT
# A B C D E F G H I J
# 1: 1 3 5 7 9 11 13 15 17 19
# 2: 2 4 6 8 10 12 14 16 18 20
setcolorder(DT, moveme(names(DT), "E, F first; B last; H, I before G"))
# DT
# E F A C D H I G J B
# 1: 9 11 1 5 7 15 17 13 19 3
# 2: 10 12 2 6 8 16 18 14 20 4