12

data.table パッケージの使い方を学んでいます。私がやろうとしていることの 1 つは、最後の列 ("x") を最初の列に移動することです。データフレームに対して行う方法は次のとおりです。

DF <- cbind(x, DF[1:ncol(DF)]) #Rearrange columns

setcolorder を読んでこれを試しましたが、エラーが発生しました

setcolorder(DT, c("x", 1: (length(DT)-1) ) )

誰もがより良い解決策を知っていますか?

4

2 に答える 2

29

オプション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
于 2013-10-27T15:27:16.020 に答える
-1

最初の列に x が必要な場合、次の構文が機能すると思います

DF <- cbind(x,DF)

または、nのような任意の列に入れたい場合

DF.combine <- cbind(DF[,1:(n-1)], x, DF[,n:ncol(DF)])# n should >1
于 2013-10-27T17:31:26.737 に答える