2017-05-10 166 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。 –