2017-10-30 31 views
0

私はdata.table 並べ替え列

このような
ds <- data.table(ID = c(1,1,1,1,1,2,2,2,2,2), 
       Month = c("Jan", "Feb", "Mar", "Apr", "May", "Jan", "Feb", "Mar", "Apr", "May"), 
       val = c(1,2,3,4,5,6,7,8,9,10)) 

ds 
    ID Month val 
1: 1 Jan 1 
2: 1 Feb 2 
3: 1 Mar 3 
4: 1 Apr 4 
5: 1 May 5 
6: 2 Jan 6 
7: 2 Feb 7 
8: 2 Mar 8 
9: 2 Apr 9 
10: 2 May 10 

を持っている私は、各IDのグループ内で、私はこの

ID Month val 
4: 1 Apr 4 
5: 1 May 5 
1: 1 Jan 1 
2: 1 Feb 2 
3: 1 Mar 3 
9: 2 Apr 9 
10: 2 May 10 
6: 2 Jan 6 
7: 2 Feb 7 
8: 2 Mar 8 

ようMonth順番を並べ替える私のdata.tableをしたいです私はグループごとに、月の順序はApr, May, Jan, Feb, Mar

どのように私はこれを達成することができますか?

+1

を追加するには、を使用してください。関連記事:https://stackoverflow.com/questions/2375587/reorder-levels-of-a-factor-without-changing-order-of-values – zx8754

答えて

2

私たちは、カスタムオーダー

ds[order(factor(Month, levels = c("Apr", "May", "Jan", "Feb", "Mar"))), .SD,ID] 
# ID Month val 
# 1: 1 Apr 4 
# 2: 1 May 5 
# 3: 1 Jan 1 
# 4: 1 Feb 2 
# 5: 1 Mar 3 
# 6: 2 Apr 9 
# 7: 2 May 10 
# 8: 2 Jan 6 
# 9: 2 Feb 7 
#10: 2 Mar 8 

それとも別のオプションで指定したlevelsfactorに "月" を変換することによりiorderを使用することができますが代わりにmatch

ds[order(match(Month, c("Apr", "May", "Jan", "Feb", "Mar"))), .SD,ID] 

です1つ1つ指定する場合はmonth.abb、つまりを使用することもできます

関連する問題