Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 根据数据表中的“因子”列对每组行重新排序_R_Sorting_Data.table - Fatal编程技术网

R 根据数据表中的“因子”列对每组行重新排序

R 根据数据表中的“因子”列对每组行重新排序,r,sorting,data.table,R,Sorting,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 F

我有一个
数据表
如下

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
我要每组,月份顺序为:4月、5月、1月、2月、3月


如何实现这一点?

我们可以使用
I
中的
订单,方法是将“月”转换为
因子,并在自定义订单中指定
级别

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

或者另一个选项是
match

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

我们也可以使用
month.abb,即
month.abb[c(4:5,1:3)]
代替
c(“Apr”、“May”、“Jan”、“Feb”、“Mar”)
我们可以通过转换
i
中的
订单到
系数
,并在自定义顺序中指定
级别

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

或者另一个选项是
match

ds[order(match(Month, c("Apr", "May", "Jan", "Feb", "Mar"))), .SD,ID]
我们也可以使用
month.abb,即
month.abb[c(4:5,1:3)]
来代替
c(“四月”、“五月”、“一月”、“二月”、“三月”)

相关职位:相关职位: