我有这样排序数据和排名
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