本文介绍了R:列组更改时的递增排名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
R的新手,我曾尝试使用Google搜索,但是找不到解决方案。
Newbie to R, I've tried Googling but I'm failing find a solution.
这是我的数据框:
Name Value
Bob 50
Mary 55
John 51
Todd 50
Linda 56
Tom 55
所以我已经对它进行了排序,但是我需要添加一个排名列,所以看起来像这样:
So I've sorted it but what I need to add a rank column, so it looks like this:
Name Value Rank
Bob 50 1
Todd 50 1
John 51 2
Mary 55 3
Tom 55 3
Linda 56 4
所以我发现的是:
resultset$Rank <- ave(resultset$Name, resultset$Value, FUN = rank)
但这给我:
Name Value Rank
Bob 50 1
Todd 50 2
John 51 1
Mary 55 1
Tom 55 2
Linda 56 1
那么近,但到目前为止……
So close but yet so far...
推荐答案
这是基本的R解决方案:
Here's a base-R solution:
uv <- unique(df$Value)
merge(df,data.frame(uv,r=rank(uv)),by.x="Value",by.y="uv")
Value Name r
1 50 Bob 1
2 50 Todd 1
3 51 John 2
4 55 Mary 3
5 55 Tom 3
6 56 Linda 4
这是内存效率低下的问题,并且具有重新使用数据的副作用。您也可以选择:
This is memory inefficient and has the side-effect of resorting your data. You could alternately do:
require(data.table)
DT <- data.table(df)
DT[order(Value),r:=.GRP,by=Value]
其中给出
Name Value r
1: Bob 50 1
2: Mary 55 3
3: John 51 2
4: Todd 50 1
5: Linda 56 4
6: Tom 55 3
这篇关于R:列组更改时的递增排名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!