r - 如何从多级R data.table中组内列中的最高值排名
问题描述
我的目标是创建“总体排名”和“排名秒”列
# data
TYPE CODE SUM overall rank rank sec
old AB 93 7 2
old LI 220 6 1
new EE 500 3 1
new HH 1.4 11 5
new AB 23.3 9 3
new xxx 62.05 8 2
new LI 10.68 10 4
end EE 500 3 3
end HH 384.6 5 4
end AB 600 2 2
end xxx 1375.7 1 1
第一个整体列可以实现如下
data[order(SUM,decreasing = T,),"overall rank":=1:.N][]
第二列的此脚本不起作用
data[order(SUM,decreasing = T,),"rank sec":=1:.N,by=c("TYPE","CODE")][]
使用 data.table 样式实现目标的最有效方法是什么?
解决方案
我们可能只需要按“TYPE”分组,因为每个“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
推荐阅读
- python - 同时在同一个jupyter笔记本上进行多个同时连接
- c# - 使用 SQL 更新特定行
- java - Telegram Bot Java. 500 Request failed
- android - Save image's path in sqlite database Android
- c# - 使用 Html 助手 HiddenFor C# MVC 将模型添加到模型中
- php - 未定义的偏移量:从下拉列表中选择时出现 1 个错误问题
- javascript - 根据已排序的“主”数组的顺序有效地对无序的“子集”数组进行排序
- javascript - 主要的 Ember 升级 - 1.12 到 3.5
- sql - 收集值作为表中的 from
- c# - 需要在系统不活动 X 时间后打开 Windows 窗体(如屏幕保护程序)