Ich mag würde eine Tabelle wie folgt aus (*) zu transformieren:Wide-Format mit dcast data.table
set.seed(1)
mydata <- data.frame(ID=rep(1:4, each=3), R=rep(1:3, times=4), FIXED=rep(runif(4), each=3), AAA=rnorm(12), BBB=rbinom(12,12,0.5), CCC=runif(12))
ID R FIXED AAA BBB CCC
1 1 0.26 -0.83 8 0.82
1 2 0.26 1.59 5 0.64
1 3 0.26 0.32 6 0.78
2 1 0.37 -0.82 6 0.55
2 2 0.37 0.48 6 0.52
2 3 0.37 0.73 4 0.78
3 1 0.57 0.57 8 0.02
3 2 0.57 -0.30 7 0.47
3 3 0.57 1.51 7 0.73
4 1 0.90 0.38 4 0.69
4 2 0.90 -0.62 7 0.47
4 3 0.90 -2.21 6 0.86
in breite Format, wie folgt aus:
ID FIXED AAA1 BBB2 CCC2 FIXED2 AAA2 BBB2 CCC2 FIXED3 AAA3 BBB3 CCC3
1 0.27 0.49 7 0.73 0.37 0.74 4 0.69 0.57 0.58 7 0.48
2 0.91 -0.31 6 0.86 0.20 1.51 8 0.44 0.90 0.39 7 0.24
3 0.94 -0.62 7 0.07 0.66 -2.21 6 0.10 0.63 1.12 6 0.32
4 0.06 -0.04 7 0.52 0.21 -0.02 3 0.66 0.18 0.94 6 0.41
Wie kann ich es tun?
ich mit
dcast(mydata, ID + FIXED ~ R, value.var=(names(mydata)[3:5])
oder auch Schreiben der Spaltennamen versucht haben, „AAA“, „BBB“, „CCC“, aber es erzeugt einen Fehler und ich kann das Wide-Format Ich brauche nicht bekommen. Ich habe auch andere Möglichkeiten ausprobiert, ohne Glück.
Wie kann ich es tun?
(*) In Wirklichkeit hat viel mehr Spalten, aber die Geschichte ist die gleiche.
Der Fehler ist:
Error in .subset2(x, i, exact = exact) :
recursive indexing failed at level 2
In addition: Warning message:
In if (!(value.var %in% names(data))) { :
the condition has length > 1 and only the first element will be used
Warum arbeiten Sie mit einem data.frame, wenn Ihre Frage über data.table ist?!? – Arun
Sie verweisen auf die falschen Wertvariablen und sollten 'setDT()' verwenden: 'dcast (setDT (mydata), ID + FIXED ~ R, value.var = Namen (mydata) [4: 6])' wird geben Sie das gewünschte Ergebnis. – Jaap
@Arun Ich arbeitete mit einem Datenrahmen, weil ich meine Daten so habe, obwohl ich mir nichts dagegen machen würde, irgendeine andere Option zu verwenden. Und meine Frage bezieht sich auf data.table, weil ich long in wide konvertieren musste und data.table stellt den Befehl dcast zur Verfügung. Vielleicht könnte dplyr auch verwendet werden. – skan