R - 根据等级提取值的函数

时间:2016-12-15 06:01:21

标签: r function rank

假设我有一个数据框,我根据速率订购,现在它看起来像这样:

Name    Rate  
A        10     
D        11     
C        11     
E        12     
B        13     
F        14     

我正在尝试编写一个将rank值作为参数(例如rank = 2)并输出相应名称的函数,这样如果在rank中存在关联,它将输出首先按字母顺序排列的名称。 / p>

在这种情况下,数据应如下所示:

 Name    Rate  Rank
A        10     1
C        11     2
D        11     3
E        12     4
B        13     5
F        NA     6

这样rank = 2会输出“C”(不是D) 和rank = 5将输出“B”

假设函数的rank输入被称为“num”,这就是我试过的:

    rankName <- df[!is.na(df[,2]),]
    rankName <- sort(rankName[,2],) #sorting according to Rate
    rank<-seq(1,length(rankName),by=1) #creating a sequence for rank
    rankName <- cbind(rankHosp,rank) #combining rankName & rank seq.
    comp <- rankName[rankName[,3]==num,] #finding rate value where rank = num
rankName <- rankName[rankName[,2]==comp,] #finding rows where rates are
                                          #equal at that rank
    rankName<-rankName$Name #extracting by Name

        if (length(rankName)>1){
                rankName <- sort(rankName)
                rankName <- rankName[1]
        }

我收到以下错误:

Error in `[.data.frame`(rankName, , 3) : undefined columns selected 

我假设,无论我的错误如何,都有一种非常简单的方法来实现这一点,但我无法弄明白。

任何建议表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:0)

这样做的一种方法是使用base :: rank()然后使用dplyr等软件包提供的分组功能

public void getname(String inputname)
{
    subname = inputname.substring(0,3);
    randomnumber = (int)(Math.random()*1000);

    String randomnumberAsString = String.valueOf(randomnumber);

    outputname = subname + randomnumberAsString;
}

第一个rnk是使用average创建的,所以我们group_by使用这些平均值,对于名称D和C将是2.5