假设我有一个数据框,我根据速率订购,现在它看起来像这样:
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
我假设,无论我的错误如何,都有一种非常简单的方法来实现这一点,但我无法弄明白。
任何建议表示赞赏。谢谢!
答案 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