Один из вариантов будет группировать по «Классу» и paste
range
из «Значения» и arrange
при необходимости
library(dplyr)
library(readr)
df1 %>%
group_by(Class) %>%
summarise(Range = paste(range(Value), collapse = ' - ')) %>%
arrange(parse_number(Range))
# A tibble: 3 x 2
# Class Range
# <chr> <chr>
#1 Salvar 6 - 10
#2 Abrir 9 - 29
#3 Shift 10 - 17
Или поместите его в list
aggregate(Value ~ Class, df1, FUN = range)
Данные
df1 <- structure(list(Class = c("Abrir", "Abrir", "Abrir", "Abrir",
"Salvar", "Salvar", "Salvar", "Shift", "Shift", "Shift", "Shift"
), Value = c(15L, 9L, 29L, 13L, 10L, 6L, 9L, 16L, 12L, 10L, 17L
)), class = "data.frame", row.names = c(NA, -11L))