Har*_*pta 1 sorting r data.table
我有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
Run Code Online (Sandbox Code Playgroud)
我想让我data.table在每个ID组中的位置重新Month排列这样的顺序
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
Run Code Online (Sandbox Code Playgroud)
我希望每个组的月份顺序为 Apr, May, Jan, Feb, Mar
我该如何实现?
我们可以用order在i通过将“月”,以factor与levels自定义命令指明
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
Run Code Online (Sandbox Code Playgroud)
或者另一个选择是 match
ds[order(match(Month, c("Apr", "May", "Jan", "Feb", "Mar"))), .SD,ID]
Run Code Online (Sandbox Code Playgroud)
除了一一指定,我们还可以利用month.abbie month.abb[c(4:5, 1:3)]代替c("Apr", "May", "Jan", "Feb", "Mar")
| 归档时间: |
|
| 查看次数: |
380 次 |
| 最近记录: |