Мы можем gather
и затем использовать top_n
, чтобы получить верхние 2 значения.
library(tidyverse)
df %>%
gather(color, n, -year) %>%
group_by(year) %>%
top_n(2, n)
# year color n
# <int> <chr> <int>
#1 2013 red 14
#2 2013 yellow 28
#3 2012 pink 5
#4 2012 white 6
Или мы также можем arrange
и slice
df %>%
gather(color, n, -year) %>%
arrange(year, desc(n)) %>%
group_by(year) %>%
slice(c(1, 2))