2017-05-10 112 views
-1

我有这样排序数据和排名

Name Value 
A.  -5 
B.  100 
F.   0 
G.  -5 

我想按升序对数据进行排序并添加排名列的数据帧。所以我想要这样的东西:

Name.  Value.  Rank 
A.   -5.   1 
G.   -5.   1 
F.    0.   2 
B.   100.   3 

回答

0

这可以通过dplyr包简单实现。

#Recreate the data 
df <- read.table(text = "Name Value 
A. -5 
B. 100 
F. 0 
G. -5", header = TRUE) 

library(dplyr) 
df %>% arrange(Value) %>% mutate(Rank = dense_rank(Value)) 

dplyr函数读取作为数据帧df,然后通过Value安排它,然后添加新的列Rank其等于的Value致密排名。

+0

我可以不使用任何包吗? – Taliman

+0

根据[本页](https://github.com/tidyverse/dplyr/issues/103),没有R等效功能。你可以用'rank(df $ Value,ties.method =“min”)''开始的多个步骤来完成它,因为这会留下空隙。 –

+0

'as.numeric(factor(rank(df $ Value,ties.method =“min”)))'作为一次尝试 – thelatemail

1

甲基础R解决方案可以是:

v1 <- order(df$Value) 
data.frame(df[v1, ], rank = as.numeric(factor(df$Value[v1]))) 


# Name Value rank 
#1 A. -5 1 
#4 G. -5 1 
#3 F.  0 2 
#2 B. 100 3 

排序数据帧与order并转换排序Valuefactors然后numeric使得Value用相同的值将得到相同的秩。

+0

我有一个问题。为什么我们在使用因子时需要df $ Value的子集v1? – Taliman

+0

@Taliman'v1'是我们感兴趣的排序顺序。如果我们不使用'v1',我们将以相同的顺序得到'Value',而不排序为-5,100,0,-5。 –