dplyr::row_number()
- это функция ранжирования, которая может давать равные числа различным рангам.Например, row_number(c(1, 1, 2, 2, 3))
будет производить 1 2 3 4 5
.Тем не менее, он дает минимальное число ранг 1, второе минимальное число ранг 2 и так далее.Итак, в вашем случае, я делаю преобразование, чтобы инвертировать величину, то есть сделать наименьшее число наибольшим до ранжирования.
library(dplyr)
df %>% group_by(Category) %>%
mutate(Rank = row_number(max(Value) - Value))
# # A tibble: 10 x 3
# # Groups: Category [2]
# Category Value Rank
# <fct> <dbl> <int>
# 1 A 0.105 1
# 2 A 0.104 2
# 3 A 0 3
# 4 A 0 4
# 5 A 0 5
# 6 B 0.206 1
# 7 B 0.105 2
# 8 B 0.104 3
# 9 B 0 4
# 10 B 0 5
with()
или within()
Метод
within(df, Rank <- ave(Value, Category, FUN = function(x){
return(dplyr::row_number(max(x) - x))
}))
(Пожалуйста, посмотрите разницу между with()
и within()
в документе R)
Данные
df <- structure(list(Category = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L),
.Label = c("A", "B"), class = "factor"),
Value = c(0.105, 0.104, 0, 0, 0, 0.206, 0.105, 0.104, 0, 0)),
class = "data.frame", row.names = c(NA, -10L))