Мы можем использовать dense_rank
для получения порядка Value
и использовать этот индекс для поднабора информации о категории.
library(dplyr)
df %>%
group_by(Year) %>%
mutate(Cat = if (n_distinct(Value) > 2))
c("Low", "Medium", "High")[dense_rank(Value)] else
c("Low","High")[dense_rank(Value)])
# Year Value Cat
# <int> <dbl> <chr>
#1 2011 2.1 Low
#2 2011 2.1 Low
#3 2011 3.5 Medium
#4 2011 7.8 High
#5 2011 7.8 High
#6 2012 1.8 Low
#7 2012 1.8 Low
#8 2012 1.8 Low
#9 2012 5.5 High
данные
df <- structure(list(Year = c(2011L, 2011L, 2011L, 2011L, 2011L, 2012L,
2012L, 2012L, 2012L), Value = c(2.1, 2.1, 3.5, 7.8, 7.8, 1.8,
1.8, 1.8, 5.5)), class = "data.frame", row.names = c(NA, -9L))