Convert R-Datenframe vom Lang- zum Breitformat, jedoch mit ungleicher Gruppengröße, zur Verwendung mit qcc

Ich möchte einen Datenrahmen vom Langformat in ein Breitformat konvertieren, aber mit ungleichen Gruppengrößen.

Die spätere Verwendung erfolgt in 'qcc', was einen Datenrahmen oder eine Matrix erfordert, wobei jede Zeile aus einer Gruppe besteht, wobei NAs in Gruppen mit weniger Abtastwerten verwendet werden.

Der folgende Code erstellt einen Beispieldatensatz und zeigt die manuelle Konvertierung in das gewünschte Format.

# 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))

Also, ich würde das gerne konvertieren:

      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

... dazu ...

              [,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

Es gibt wahrscheinlich einen einfachen Weg (vielleicht eine Verwendung von Reshape oder Reshape2-Casting, die ich nicht kenne?), Aber ein paar Suchanfragen haben mir bisher nicht geholfen.

Vielen Dank für jede Hilfe!

==========

Aus einer der folgenden Lösungen wird das endgültige qcc xbar-Diagramm einschließlich der Gruppenbezeichnungen erstellt:

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

Antworten auf die Frage(6)

Ihre Antwort auf die Frage