Если это строка, то мы можем использовать apply
t(apply(df1[-1], 1, function(x) head(sort(-x), 3)))
или с pmap
, возвращая столбец list
с 3 значениями в строке
library(purrr)
library(dplyr)
df1 %>%
mutate(top3 = select(., -ID) %>% pmap(~ head(sort(-c(...)), 3)))
Если мы хотим использовать top_n
, одним из вариантов является изменение в «длинный» формат
library(tidyr)
df1 %>%
pivot_longer(cols = -ID) %>%
group_by(ID) %>%
top_n(3, value)