como reunir 2 conjuntos de colunas em tidyr [duplicado]

Esta pergunta já tem uma resposta aqui:

Combine várias colunas em dados organizados [duplicado] 3 respostasFormatar vários conjuntos de colunas de medição (formato amplo) em colunas únicas (formato longo) respostas

Tenho a seguinte estrutura:

key | category_x | 2009 | category_y | 2010
test

example dados conforme 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
)

como mudo isso para:

key | category | year

Sei que posso usar:

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

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

mas isso não lida com o ano. Eu olhei para Reúna vários conjuntos de colunas

mas não recebo os comandos de extração de propagaçã

questionAnswers(1)

yourAnswerToTheQuestion