R: присвоить ранг 1 предопределенному наибольшему значению - PullRequest
0 голосов
/ 26 мая 2018

У меня есть такой набор данных:

Value 
  5    
  4
  2
  1   

Я хочу, чтобы наибольшее значение имело наименьший ранг, а самое низкое значение - наивысший ранг.В этом наборе данных значение = 1 перекодирует в 5, а значение = 5 перекодирует в 1. Однако из-за отсутствия значения = 3 в моем наборе данных с помощью функции ранга (-Value) мне удалось получить только это

Value Rank 
  5    1   
  4    2
  2    3
  1    4   

Есть ли способ в R получить что-то подобное?

Value Rank 
  5    1   
  4    2
  2    4
  1    5   

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Вы можете сделать это, найдя максимальное и минимальное значения вашего вектора, а затем выполнив поиск индекса по полному числу, установленному между максимальным и минимальным значениями.

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. Извините, у меня недостаточно репутации, чтобы добавить это в качестве комментария.

0 голосов
/ 26 мая 2018

Попробуй так:

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
...