2017-11-29 4 views
0

Ich benutze zwei verschiedene Datensätze mit demselben Format, um mit der Darstellungsfunktion zu transponieren. aber das Ergebnis ist anders, kann jemand helfen? Unten ist meine Konsole.Umformungsfunktion umformen wirft unterschiedliche Ergebnisse

> str(test.t) 
'data.frame': 12217 obs. of 3 variables: 
$ VIN  : chr "HFC26205942" "HFC26172705" "FNC26031708" "HFC26215858" ... 
$ variable: Factor w/ 1 level "COUPON_ID": 1 1 1 1 1 1 1 1 1 1 ... 
$ value : Factor w/ 22 levels "A0","B0","C0",..: 18 13 NA 17 NA NA NA NA NA NA ... 
> test.t1 <- cast(test.t,VIN~value) 
> test.t1[1:3,] 
     VIN A0 B0 C0 D0 E0 F0 G0 H0 I0 J0 K0 L0 M0 N0 O0 P0 S0 T0 W0 X0 Y0 Z0 NA 
1 C26060288 <NA> <NA> <NA> <NA> E0 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
2 C26060396 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> S0 <NA> <NA> <NA> <NA> <NA> <NA> 
3 C26061050 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
> str(propack.full.t) 
'data.frame': 313265 obs. of 3 variables: 
$ VIN  : chr "NT31322055" "NT31315819" "E12079358" "E12125048" ... 
$ variable: Factor w/ 1 level "COUPON_ID": 1 1 1 1 1 1 1 1 1 1 ... 
$ value : Factor w/ 24 levels "A0","B0","C0",..: NA NA 2 1 1 NA 1 1 NA 1 ... 
> propack.full.t1 <- cast(propack.full.t[1:10000,],VIN~value) 
Aggregation requires fun.aggregate: length used as default 
> propack.full.t1[1:3,] 
     VIN A0 B0 C0 D0 E0 F0 G0 H0 I0 J0 K0 L0 M0 O0 P0 R0 S0 V0 W0 X0 Y0 Z0 NA 
1 C26043349 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 
2 C26060102 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
3 C26061202 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 

Antwort

0

Der Unterschied ist aus diesem Grund:

Wenn die Kombination von Variablen, die Sie liefert keine eindeutig eine Zeile in den Originaldaten Satz identifizieren, müssen Sie eine Aggregatfunktion liefern,

(https://cran.r-project.org/web/packages/reshape/reshape.pdf)

in dem zweiten Datenrahmen, gibt es offenbar Zeilen, in denen VIN-Wert-Paare identisch sind. Für diese Zeilen weiß cast nicht, was zu tun ist, da es eine Aggregationsfunktion benötigt. Wie Sie im Fehler sehen, wird standardmäßig length verwendet.

E

Für den ersten Datenrahmen passiert dieser Fall nicht und keine Aggregation ist erforderlich, so dass Sie andere Ergebnisse sehen.

Ich bin mir nicht sicher, welche Art von Ausgabe Sie von hier haben möchten, aber Sie sollten den fun.aggregate Parameter der cast() Funktion entsprechend angeben.

Wenn Sie nur den data.frame transponieren möchten, sollten Sie einfach die t() Funktion verwenden.

Verwandte Themen