【发布时间】:2017-11-29 00:08:29
【问题描述】:
从这篇文章跟进: Calculate ranks for each group
df <- ddply(df, .(type), transform, pos = rank(x, ties.method = "min")-1)
使用上述帖子中描述的方法,当您在同一个 TYPE 上有多个平局时,排名输出 (Pos) 会变得有点混乱且难以解释,尽管从技术上讲仍然是准确的输出。
例如:
library(plyr)
df <- data.frame(type = c(rep("a",11), rep("b",6), rep("c",2), rep("d", 6)),
x = c(50:53, rep(54, 3), 55:56, rep(57, 2), rep(51,3), rep(52,2), 56,
53, 57, rep(52, 2), 54, rep(58, 2), 70))
df<-ddply(df,.(type),transform, pos=rank(x,ties.method="min")-1)
生产:
Type X Pos
a 50 0
a 51 1
a 52 2
a 53 3
a 54 4
a 54 4
a 54 4
a 55 7
a 56 8
a 57 9
a 57 9
b 51 0
b 51 0
b 51 0
b 52 3
b 52 3
b 56 5
c 53 0
c 57 1
d 52 0
d 52 0
d 54 2
d 58 3
d 58 3
d 70 5
Pos 相对排名是正确的(相等的值排名相同,较低的值排名较低,较高的值排名较高),但我一直在努力使输出看起来更漂亮。有什么想法吗?
我想让输出看起来像这样:
Type X Pos
a 50 1
a 51 2
a 52 3
a 53 4
a 54 5
a 54 5
a 54 5
a 55 6
a 56 7
a 57 8
a 57 8
b 51 1
b 51 1
b 51 1
b 52 2
b 52 2
b 56 3
c 53 1
c 57 2
d 52 1
d 52 1
d 54 2
d 58 3
d 58 3
d 70 4
当然,这种格式假定每个组的记录总数无关紧要。通过去掉“-1”,我们可以去掉 0,但这只能解决一个方面。我尝试过使用不同的方程式和 ties.method,但无济于事。
也许 rank() 函数不是我应该使用的?
【问题讨论】: