我有一个带有分组变量'ID'和一些值('Value')的数据框:
dt <- data.frame(
ID = c('A1','A2','A4','A2','A1','A4','A3','A2','A1','A3'),
Value = c(4,3,1,3,4,6,6,1,8,4)
)
dt
# ID Value
# 1 A1 4
# 2 A2 3
# 3 A4 1
# 4 A2 3
# 5 A1 4
# 6 A4 6
# 7 A3 6
# 8 A2 1
# 9 A1 8
# 10 A3 4
我可以这样计算“Value”列的总体排名:
dt$Order <- rank(dt$Value, ties.method = "first")
dt
# ID Value Order
# 1 A1 4 5
# 2 A2 3 3
# 3 A4 1 1
# 4 A2 3 4
# 5 A1 4 6
# 6 A4 6 8
# 7 A3 6 9
# 8 A2 1 2
# 9 A1 8 10
# 10 A3 4 7
但是我该如何计算每个“ID”内的排名顺序,而不是全局排名顺序呢?
# ID Value rnk
# 1 A1 4 1
# 2 A2 3 2
# 3 A4 1 1
# 4 A2 3 3
# 5 A1 4 2
# 6 A4 6 2
# 7 A3 6 2
# 8 A2 1 1
# 9 A1 8 3
# 10 A3 4 1
在 T-SQL 中,我们可以使用以下语法来完成此操作:
RANK() OVER ( [ < partition_by_clause > ] < order_by_clause > )
有什么想法吗?