2016-09-20 2 views
0

Ich habe einen Datenrahmen, der wie dieseGroup, zusammengefasst und in einem Schritt umsetzen

 Vehicle Model Month Sales 
     A XXY  1 10 
     A XXY  1 100 
     A XXY  2 40 
     A XXY  3 10 
     A YYX  3 10 
     A YYX  3 33 
     B ZZZ  1 50 
     B ZZY  2 60 

ich es zu transformieren können, wollen sieht wie folgt aus:

 Vehicle Model 1 2 3 4 5 
     A  XXY 2 1 1 0 0 
     A  YYX 0 0 2 0 0 
     B  ZZZ 1 0 0 0 0 
     B  ZZY 0 1 0 0 0 

So im Wesentlichen möchte ich - Gruppieren Sie nach 2 Feldern (Fahrzeug, Modell) und zählen Sie dann die Anzahl der Datensätze in der Spalte "Umsatz" nach Monat, und transponieren Sie die Daten so, dass Monat zu Spalte und Fahrzeug/Modell zu meinen Zeilen wird. Auch einige Modelle haben möglicherweise nicht bis zu 12 Monate, aber ich möchte alle Spalten 1 bis 12 anzeigen und 0 lassen, wenn keine Daten verfügbar sind

Der Datenrahmen ist ziemlich groß. Irgendeine Empfehlung? Danke

+0

Der Datenheader sollte mit Spalten ausgerichtet sein. Zuerst dachte ich, die letzte Spalte sei "Monatsverkauf". – dracodoc

Antwort

0

Nicht sicher über den "ein Schritt" -Teil der Frage. Es in mehreren Schritten funktioniert nicht?

library(data.table) 
s <- "  Vehicle Model Month Sales 
     A XXY  1 10 
     A XXY  1 100 
     A XXY  2 40 
     A XXY  3 10 
     A YYX  3 10 
     A YYX  3 33 
     B ZZZ  1 50 
     B ZZY  2 60" 
dt <- fread(s) 

dt[, sale_count := .N, by = .(Vehicle, Model, Month)] 
dt[, Sales := NULL] 
dt <- unique(dt) 
dcast(dt, Vehicle + Model ~ Month, value.var = "sale_count") 

Ergebnis: Es gibt NA statt 0 für Monate nicht verfügbar. Sie können es auf 0 ändern, wenn Sie möchten.

Vehicle Model 1 2 3 
1:  A XXY 2 1 1 
2:  A YYX NA NA 2 
3:  B ZZY NA 1 NA 
4:  B ZZZ 1 NA NA 
+0

Danke - du hast meine Aufgabe gelöst! – Elly

Verwandte Themen