Мы можем преобразовать 'Тип' в factor
с levels
, указанным в пользовательском заказе
library(dplyr)
df1 %>%
arrange(factor(Type, levels = c('C1.', 'C3.', 'C2.')), desc(freq))
# Type freq Val
#1 C1. 0.90. 4-A
#2 C1. 0.65. 3-C
#3 C3. 0.34. 10-A
#4 C3. 0.11. 5-D
#5 C2. 0.77. 5-D
#6 C2. 0.40. 5-B
Или используя data.table
library(data.table)
setDT(df1)[, Type := factor(Type, levels = c('C1.', 'C3.', 'C2.'))]
setorder(df1, Type, -freq)
В base R
мы можем сделать
df1[order(factor(df1$Type, levels = c('C1.', 'C3.', 'C2.')), -df1$freq),]
data
df1 <- structure(list(Type = c("C3.", "C1.", "C2.", "C1.", "C2.", "C3."
), freq = c("0.34.", "0.90.", "0.40.", "0.65.", "0.77.", "0.11."
), Val = c("10-A", "4-A", "5-B", "3-C", "5-D", "5-D")),
class = "data.frame", row.names = c(NA,
-6L))