R:将等级1分配给Predifined Largest Value

时间:2018-05-26 08:18:43

标签: r rank recode

我有这样的数据集:

EMP_NUMBER   ATTDATE      ATTINTIME    ATTOUTTIME
00001        01-05-2018    9:00         18:00
00001        02-05-2018    8:00          20:00

我希望最大值具有最小排名,而最低值具有最高排名。 在此数据集中,Value = 1将重新编码为5,而Value = 5将重新编码为1。 但是,由于我的数据集中缺少Value = 3,通过使用等级函数等级(-Value),我只能设法得到这个

Value 
  5    
  4
  2
  1   

R中有什么方法可以得到这样的东西吗?

Value Rank 
  5    1   
  4    2
  2    3
  1    4   

2 个答案:

答案 0 :(得分:0)

试试这样:

df <- data.frame(Value = c(5, 4, 2, 1))
df$fact <- as.factor(df$Value)
df$Rank <- as.numeric(rev(levels(df$fact)))[df$fact]


> (df <- df[, -2])
  Value Rank
1     5    1
2     4    2
3     2    4
4     1    5

答案 1 :(得分:0)

您可以通过查找向量的最大值和最小值,然后在最大值和最小值之间的完整数字集内搜索索引来执行此操作。

v <- c(5,4,2)
x <- min(v)
y <- max(v)
x:y
match(v,x:y)
[1] 4 3 1

使用因子的水平作为J.Win。只要你的矢量中有一个1,建议就会起作用,否则,最高值的排名不会为1.抱歉,我没有足够的声誉将其添加为评论。