Stellen wir Daten über langes Format wie diese:R: Von Langformat-Tabelle "diagonal" Format
ID T X Y Z
1 1 x1 y1 z1
1 2 x2 y2 z2
1 3 x3 y3 z3
2 1 ....
Mit mehreren Eingangsgrößen (hier nur X und Y) und Ausgangsgrößen (hier Z).
Ich habe nur die ersten Zeilen gezeigt, die zu und 1 gehören, aber wir hätten mehr Daten darunter.
Wie kann ich es in dieses Format umwandeln:
1 1 x1 y1 z1
1 2 x1 x2 y1 y2 z2
1 3 x1 x2 x3 y1 y2 y3 z3
2 1 ... ....
Wo der fehlende Raum NAs o 0.
Jede Lösung mit data.table, dplyr oder Base R wäre, ist willkommen.
Der Grund, warum ich tue es, weil ich so zu einer Regression will:
y1 = a10 + a11·X1
y2 = a20 + a21·X1 + a22·X2
y3 = a30 + a31·X1 + a32·X2 + a33·X3
Wenn Sie ein reproduzierbares Beispiel wollen:
set.seed(1)
ID <- rep(1:4,each=4)
XX <- round(runif(16),3)
YY <- round(runif(16),3)
TT <- rep(1:4, 4)
ZZ <- ave(XX*TT,ID, FUN = cumsum)
data.frame(ID,TT,XX, YY, ZZ)
ID TT XX YY ZZ
1 1 1 0.266 0.718 0.266
2 1 2 0.372 0.992 1.010
3 1 3 0.573 0.380 2.729
4 1 4 0.908 0.777 6.361
5 2 1 0.202 0.935 0.202
6 2 2 0.898 0.212 1.998
7 2 3 0.945 0.652 4.833
8 2 4 0.661 0.126 7.477
9 3 1 0.629 0.267 0.629
10 3 2 0.062 0.386 0.753
11 3 3 0.206 0.013 1.371
12 3 4 0.177 0.382 2.079
13 4 1 0.687 0.870 0.687
14 4 2 0.384 0.340 1.455
15 4 3 0.770 0.482 3.765
16 4 4 0.498 0.600 5.757
Was passiert, wenn ich das Ergebnis wollte wie?
1 1 x1 y1 z1
1 2 x2 x1 y2 y1 z2
1 3 x3 x2 x1 y3 y2 y1 z3
2 1 ... ....
Ich denke, dass es mit Basis R aus dem Wide-Format erfolgen kann, indem jede Zeile repliziert und später jede Spalte eine andere Nummer verschiebt ... – skan
In Bezug auf die letzte Änderung: Das ist einfach wi th data.table :: Verschiebung. – Roland