如何在多级R数据表中从组内列的最高值排序 我的目标是创建“总体排名”和“排名秒”列 第一个整体列可以实现如下所示 第二列的脚本不起作用 使用data.table样式实现目标的最有效方法是什么?

如何在多级R数据表中从组内列的最高值排序 我的目标是创建“总体排名”和“排名秒”列 第一个整体列可以实现如下所示 第二列的脚本不起作用 使用data.table样式实现目标的最有效方法是什么?,r,data.table,rank,R,Data.table,Rank,我们可能只需要按“类型”分组,因为每个“类型/代码”组合只有一行 setDT(data)[order(SUM, decreasing = TRUE), rank_sec := seq_len(.N), .(TYPE)] data # TYPE CODE SUM overall rank rank_sec # 1: old AB 93.00 7 2 2 # 2: old LI 220.00 6 1 1

我们可能只需要按“类型”分组,因为每个“类型/代码”组合只有一行

setDT(data)[order(SUM, decreasing = TRUE), rank_sec := seq_len(.N), .(TYPE)]
data
#    TYPE CODE     SUM overall rank rank_sec
# 1:  old   AB   93.00       7    2        2
# 2:  old   LI  220.00       6    1        1
# 3:  new   EE  500.00       3    1        1
# 4:  new   HH    1.40      11    5        5
# 5:  new   AB   23.30       9    3        3
# 6:  new  xxx   62.05       8    2        2
# 7:  new   LI   10.68      10    4        4
# 8:  end   EE  500.00       3    3        3
# 9:  end   HH  384.60       5    4        4
#10:  end   AB  600.00       2    2        2
#11:  end  xxx 1375.70       1    1        1

第二行代码,每个组只有一行抱歉,我在总排名列上犯了一个错误。它不应该存在于该表框架中。我试图给每个组中的最高值的排名基础,但忘记了结构也应该改变,如果我想把整体排名。否则,我必须使用秩列对“代码”列进行另一个求和,然后使用重复的秩值查找多层数据集
data[order(SUM,decreasing = T,),"overall rank":=1:.N][]
data[order(SUM,decreasing = T,),"rank sec":=1:.N,by=c("TYPE","CODE")][]
setDT(data)[order(SUM, decreasing = TRUE), rank_sec := seq_len(.N), .(TYPE)]
data
#    TYPE CODE     SUM overall rank rank_sec
# 1:  old   AB   93.00       7    2        2
# 2:  old   LI  220.00       6    1        1
# 3:  new   EE  500.00       3    1        1
# 4:  new   HH    1.40      11    5        5
# 5:  new   AB   23.30       9    3        3
# 6:  new  xxx   62.05       8    2        2
# 7:  new   LI   10.68      10    4        4
# 8:  end   EE  500.00       3    3        3
# 9:  end   HH  384.60       5    4        4
#10:  end   AB  600.00       2    2        2
#11:  end  xxx 1375.70       1    1        1