data.frameで2つの列を入れ替えたいとします。私はのような何か行うことができます知っている:総再割当てなしでデータフレームの列の位置を変更する
dd <- dd[c(1:4, 6:5, 7:10)]
をしかし、私はそれが洗練見つけ、潜在的にゆっくりとしないプログラムに優しい(あなたがlength(dd)
を知っている必要があり、およびスワップ列が接近している場合でも、いくつかのケースを持っていますか(?)その値ではない...) データフレーム全体を再割り当てせずに簡単に行う方法はありますか?
[ <-
は値だけではなく、属性に関係するので、非常に「不可逆」であることが判明しました。
(dd <- data.frame(A = 1:4, Does = 'really', SO = 'rock'))
dd[3:2]
dd[2:3] <- dd[2:1]
print(dd)
列名は明らかにひっくり返されていません...
任意のアイデア:だから例えば?私は非常に長いリストに小さなカスタム関数を追加することもできますが、grrrは方法でなければなりません。 ;-)
'data.table' pacakgeを使うと、再割り当てを伴う列の並べ替えを行うことができますが、構文はおそらくhttp-// sの処理よりはるかにクリーンではありませんtackoverflow.com/questions/12232041/how-to-reorder-data-table-columns-without-copying – thelatemail
しかし、 'setcolorder'はcol順を参照によって変更することに注意してください。コピーは作成されていません。だから、* fast *です。 – Arun
10 x 1e6データフレームの列を逆にするには約7msかかります。だから、あなたがこれをやっていない限り、あなたのコードではボトルネックになることはまずありません。スピードではなく表現力について心配する必要があります。 – hadley