我有這樣排序數據和排名
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
我有這樣排序數據和排名
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
這可以通過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
緻密排名。
甲基礎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
並轉換排序Value
到factors
然後numeric
使得Value
用相同的值將得到相同的秩。
我有一個問題。爲什麼我們在使用因子時需要df $ Value的子集v1? – Taliman
@Taliman'v1'是我們感興趣的排序順序。如果我們不使用'v1',我們將以相同的順序得到'Value',而不排序爲-5,100,0,-5。 –
我可以不使用任何包嗎? – Taliman
根據[本頁](https://github.com/tidyverse/dplyr/issues/103),沒有R等效功能。你可以用'rank(df $ Value,ties.method =「min」)''開始的多個步驟來完成它,因爲這會留下空隙。 –
'as.numeric(factor(rank(df $ Value,ties.method =「min」)))'作爲一次嘗試 – thelatemail