¿Cómo recopilo 2 conjuntos de columnas en tidyr [duplicado]

Esta pregunta ya tiene una respuesta aquí:

Combine múltiples columnas en datos ordenados [duplicado] 3 respuestasReformar múltiples conjuntos de columnas de medición (formato ancho) en columnas individuales (formato largo) 6 respuestas

Tengo la siguiente estructura:

key | category_x | 2009 | category_y | 2010
test

ejemplo de datos según lo solicitado

set.seed(24)
df <- data.frame(
key = 1:10,
category_x = paste0("stock_", 0:9),
'2008' = rnorm(10, 0, 10),
category_y = paste0("stock_", 0:9),
'2009' = rnorm(10, 0, 10),
category_z = paste0("stock_", 0:9),
'2010' = rnorm(10, 0, 10),
check.names=FALSE
)

¿Cómo cambio eso en:

key | category | year

Sé que puedo usar:

library(magrittr)
library(dplyr)
library(tidyr)

data %>% gather(key, category, starts_with("category_"))

pero eso no trata con el año. Miré Reúna múltiples conjuntos de columnas

pero no recibo los comandos de extracto de propagación.

Respuestas a la pregunta(1)

Su respuesta a la pregunta