2017-03-02 3 views
2

手動で指定した文字ベクトルに基づいてデータテーブルを注文したい。アルファベット順ではない特定の文字列に基づいてdata.tableを注文する

library(data.table) 
DT = data.table(x=c("c","b","a"), y=1:3) 

私はアルファベット順にそれを注文することができます。

DT[order(x)] 

が、私のような文字ベクトルに基づいて、それを注文することができます:ゴールされた状態で

preferred.order <- c("b","a","c") 

data.table(x=c("b","a","c"), y=c(2,1,3)) 

実際には、データがあります。収集されたアウトプットと変数名を最初の列に含めることができます。プレゼンテーションの目的で、これらの変数を特定の(アルファベット順ではない)順序で使用したいと思います。

答えて

4

一つの可能​​性は、好ましい順序に参加することである:これはpreferred.orderベクトルはDT$x内のすべての要素を含み、全く重複を持っていない必要

DT[preferred.order, on="x"] 
    x y 
1: b 2 
2: a 3 
3: c 1 

留意されたいです。

代わりに、DT$xという因子変数を優先順位付けして作成し、setorderを使用してDTを参照することができます。ユースケースで変化するであろう好ましい方法

DT 
    x y xFac 
1: b 2 b 
2: a 3 a 
3: c 1 c 

を返し

DT[, xFac := factor(x, levels=preferred.order)] 
setorder(DT, xFac) 

+0

factor変数が機能します。良いアイデア!私は誰も重複を扱うと思う(そのうちのどれもがない)。 –

関連する問題