Ich möchte einen Dataframe von Long Format in ein Wide Format konvertieren, aber mit ungleichen Gruppengrößen.Konvertiere R Dataform von Long zu Wide Format, aber mit ungleichen Gruppengrößen, zur Verwendung mit qcc
Die eventuelle Verwendung wird in 'qcc' sein, die einen Datenrahmen oder eine Matrix erfordert, wobei jede Zeile aus einer Gruppe besteht, wobei NAs in Gruppen verwendet werden, die weniger Abtastwerte haben.
Der folgende Code erstellt ein Beispieldatenset und zeigt die manuelle Konvertierung in das gewünschte Format an.
# 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))
So, würde Ich mag diese 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 wohl eine einfache Möglichkeit (vielleicht einige Nutzung von umformen oder umformen, das mir nicht bekannt ist?), aber eine Menge Suchen hat mir bisher nicht geholfen.
Danke für jede Hilfe!
==========
Von einem der folgenden Lösungen, generiert die nach dem letzten qcc xbar Grundstück, einschließlich Gruppen Etiketten:
library(splitstackshape)
out_df <- dcast(getanID(x_df, 'time'), time~.id, value.var='measure')
qcc(out_df[,-1], type = 'xbar', labels = out_df[,1])
Ich mag diese Lösung insbesondere, weil sie übersichtlich ist und weil sie sie als Datenframe hält. 'qcc' scheint Datentabellen nicht sehr zu mögen. Nicht sicher, ob es richtige StackOverflow-Etikette ist, aber ich werde meine Frage bearbeiten, um einzuschließen, wie man die obige Lösung im actuall qcc-Plotten auch verwendet, falls jemand diese Frage auf der Suche nach qcc-Lösungen findet. –
@JChou Wenn Sie die Ausgabe in 'dat.frame' konvertieren möchten, können Sie' setDF (res) 'verwenden, wobei' res <- dcast (getanID (... ' – akrun
Danke, super! Ich machte ein ganzes Eine Menge von as.data.frame() - Konvertierungen in den Datentabellen. Um ehrlich zu sein, muss ich nur über Datentabellen lernen! (Ich bin relativ neu in R im Allgemeinen). –