Converte o dataframe R de formato longo para amplo, mas com tamanhos de grupo desiguais, para uso com qcc

Gostaria de converter um dataframe de formato longo para um formato amplo, mas com tamanhos de grupo desiguais.

O uso final será em 'qcc', que requer um quadro de dados ou uma matriz, com cada linha consistindo em um grupo, usando NAs em grupos com menos amostras.

O código a seguir criará um exemplo de conjunto de dados, além de mostrar a conversão manual no formato desejado.

# This is an example of the initial data that I have
# * 10 sample measurements, over 3 groups with 3, 2, and 5 elements respectively
x <- rnorm(10)
x_df <- data.frame( time = c( rep('2001 Q1',3), rep('2001 Q2',2), rep('2001 Q3',5) ), measure = x )
x_df

# This is a manual conversion into the desired format
x_pad <- c( x[1:3], NA, NA, x[4:5], NA, NA, NA, x[6:10] )
x_matrix <- matrix( x_pad, nrow = 3, ncol = 5, byrow = TRUE, dimnames = list(c('2001 Q1','2001 Q2','2001 Q3')) )
x_matrix # desired format

# An example of how it will be used
library(qcc)
plot(qcc(x_matrix, type = 'xbar', plot = FALSE))

Então, eu gostaria de converter isso:

      time     measure
1  2001 Q1  0.14680685
2  2001 Q1  0.53593193
3  2001 Q1  0.56097974
4  2001 Q2 -1.48102689
5  2001 Q2  0.18150972
6  2001 Q3  1.72018147
7  2001 Q3 -0.08480855
8  2001 Q3 -2.23208877
9  2001 Q3 -1.15269107
10 2001 Q3  0.57975023

... para isso ...

              [,1]        [,2]       [,3]      [,4]      [,5]
2001 Q1  0.1468068  0.53593193  0.5609797        NA        NA
2001 Q2 -1.4810269  0.18150972         NA        NA        NA
2001 Q3  1.7201815 -0.08480855 -2.2320888 -1.152691 0.5797502

Provavelmente existe uma maneira fácil (talvez algum uso de reformulação ou reformulação da versão 2 com o qual eu não esteja familiarizado?), Mas várias pesquisas não me ajudaram até agora.

Obrigado por qualquer ajuda!

==========

A partir de uma das soluções abaixo, o seguinte gerará o gráfico final qcc xbar, incluindo rótulos de grupo:

library(splitstackshape)
out_df <- dcast( getanID( x_df, 'time' ), time~.id, value.var='measure' )
qcc( out_df[,-1], type = 'xbar', labels = out_df[,1] )

questionAnswers(3)

yourAnswerToTheQuestion