本文介绍了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:列组更改时的递增排名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-15 06:11