Suche…


Syntax

  • Schmelze melt(DT, id.vars=c(..), variable.name="CategoryLabel", value.name="Value")
  • Cast mit dcast(DT, LHS ~ RHS, value.var="Value", fun.aggregate=sum)

Parameter

Parameter Einzelheiten
id.vars Sagen Sie der melt welche Säulen sie behalten sollen
Variablennamen tell melt , was die Spalte mit der Kategorie Etiketten aufrufen
value.name Sagen Sie der melt wie die Spalte aufgerufen werden soll, deren Werte mit Kategoriebeschriftungen verknüpft sind
value.var dcast sagen, wo die Werte zu finden sind, die in Spalten umgewandelt werden sollen
Formel dcast mitteilen, welche Spalten beibehalten werden sollen, um eine eindeutige Datensatzkennung (LHS) zu bilden, und welche dcast die Kategorienbezeichnungen (RHS) enthält
fun.aggregate Geben Sie die zu verwendende Funktion an, wenn der Castingvorgang in jeder Zelle eine Liste von Werten generiert

Bemerkungen

Ein Großteil dessen, was zur Konditionierung von Daten zum Erstellen von Modellen oder Visualisierungen benötigt wird, kann mit data.table . Im Vergleich zu anderen Optionen bietet data.table Vorteile in data.table auf Geschwindigkeit und Flexibilität.

Tabellendaten mit data.table - I

Konvertieren Sie von Breitform in Langform

Laden Sie data USArrests aus datasets .

data("USArrests")
head(USArrests)

           Murder Assault UrbanPop Rape
Alabama      13.2     236       58 21.2
Alaska       10.0     263       48 44.5
Arizona       8.1     294       80 31.0
Arkansas      8.8     190       50 19.5
California    9.0     276       91 40.6
Colorado      7.9     204       78 38.7

Verwenden Sie ?USArrests , um mehr zu erfahren. Konvertieren Sie zuerst in data.table . Die Zustandsnamen sind data.frame im ursprünglichen data.frame .

library(data.table)
DT <- as.data.table(USArrests, keep.rownames=TRUE)

Dies sind Daten in der breiten Form. Für jede Variable gibt es eine Spalte. Die Daten können auch ohne Informationsverlust in langer Form gespeichert werden. Das lange Formular enthält eine Spalte, in der die Variablennamen gespeichert sind. Dann hat es eine weitere Spalte für die Variablenwerte. Die lange Form von USA- USArrests sieht so aus.

            State    Crime  Rate
  1:       Alabama   Murder  13.2
  2:        Alaska   Murder  10.0
  3:       Arizona   Murder   8.1
  4:      Arkansas   Murder   8.8
  5:    California   Murder   9.0
 ---                             
196:      Virginia     Rape  20.7
197:    Washington     Rape  26.2
198: West Virginia     Rape   9.3
199:     Wisconsin     Rape  10.8
200:       Wyoming     Rape  15.6

Wir verwenden die melt , um von Breitform zu Langform zu wechseln.

DTm <- melt(DT)
names(DTm) <- c("State", "Crime", "Rate")

Standardmäßig behandelt melt alle Spalten mit numerischen Daten als Variablen mit Werten. In USArrests UrbanPop repräsentiert die Variable UrbanPop den prozentualen Anteil der städtischen Bevölkerung eines Staates. Es unterscheidet sich von den anderen variabes, Murder , Assault und Rape , die pro 100.000 Menschen berichteten Gewaltverbrechen sind. Angenommen, wir möchten die UrbanPop Spalte beibehalten. Dies erreichen wir, indem wir id.vars wie folgt id.vars .

DTmu <- melt(DT, id.vars=c("rn", "UrbanPop" ), 
             variable.name='Crime', value.name = "Rate")
names(DTmu)[1] <- "State"

Beachten Sie, dass wir die Namen der Spalte angegeben haben, die Kategorienamen (Murder, Assault usw.) mit variable.name und die Spalte, die die Werte mit value.name . Unsere Daten sehen so aus.

             State UrbanPop  Crime Rate
  1:       Alabama       58 Murder 13.2
  2:        Alaska       48 Murder 10.0
  3:       Arizona       80 Murder  8.1
  4:      Arkansas       50 Murder  8.8
  5:    California       91 Murder  9.0

Das Erstellen von Zusammenfassungen mit Split-Apply-Combine-Stil ist ein Kinderspiel. Zum Beispiel, um Gewaltverbrechen nach Staat zusammenzufassen?

DTmu[, .(ViolentCrime = sum(Rate)), by=State]

Das gibt:

        State ViolentCrime
1:    Alabama        270.4
2:     Alaska        317.5
3:    Arizona        333.1
4:   Arkansas        218.3
5: California        325.6
6:   Colorado        250.6

Tabellendaten mit data.table - II pivotieren und aufheben

Konvertieren Sie von Langform in Breitform

Um Daten aus dem vorherigen Beispiel dcast , verwenden Sie dcast so.

DTc <- dcast(DTmu, State + UrbanPop ~ Crime)

Dies gibt die Daten in der ursprünglichen breiten Form an.

             State UrbanPop Murder Assault Rape
 1:        Alabama       58   13.2     236 21.2
 2:         Alaska       48   10.0     263 44.5
 3:        Arizona       80    8.1     294 31.0
 4:       Arkansas       50    8.8     190 19.5
 5:     California       91    9.0     276 40.6

Hier wird die Formelnotation verwendet, um die Spalten anzugeben, die eine eindeutige Datensatzkennung (LHS) bilden, und die Spalte, die Kategoriebeschriftungen für neue Spaltennamen (RHS) enthält. Welche Spalte für die numerischen Werte? Standardmäßig verwendet dcast die erste Spalte mit numerischen Werten, die bei der Angabe der Formel übrig bleiben. Um dies explizit zu machen, verwenden Sie den Parameter value.var mit dem Spaltennamen.

Wenn der Vorgang eine Liste von Werten in jeder Zelle erzeugt, dcast stellt eine fun.aggregate Methode , die Situation zu handhaben . Angenommen, ich interessiere mich für Staaten mit einer ähnlichen städtischen Bevölkerung, wenn die Kriminalitätsrate untersucht wird. Ich füge eine Spalte Decile mit berechneten Informationen hinzu.

DTmu[, Decile := cut(UrbanPop, quantile(UrbanPop, probs = seq(0, 1, by=0.1)))]
levels(DTmu$Decile) <- paste0(1:10, "D")

Wenn Sie Decile ~ Crime werden jetzt mehrere Werte pro Zelle erzeugt. Ich kann fun.aggregate um festzustellen, wie mit diesen fun.aggregate wird. Sowohl Text- als auch Zahlenwerte können auf diese Weise verarbeitet werden.

dcast(DTmu, Decile ~ Crime, value.var="Rate", fun.aggregate=sum)

Das gibt:

dcast(DTmu, Decile ~ Crime, value.var="Rate", fun.aggregate=mean)

Das gibt:

             State UrbanPop  Crime Rate Decile
  1:       Alabama       58 Murder 13.2     4D
  2:        Alaska       48 Murder 10.0     2D
  3:       Arizona       80 Murder  8.1     8D
  4:      Arkansas       50 Murder  8.8     2D
  5:    California       91 Murder  9.0    10D

In jedem Dezil der städtischen Bevölkerung gibt es mehrere Staaten. Verwenden Sie fun.aggregate um anzugeben, wie diese behandelt werden sollen.

dcast(DTmu, Decile ~ Crime, value.var="Rate", fun.aggregate=sum)

Dies summiert sich über die Daten für ähnliche Zustände, was folgendes ergibt.

    Decile Murder Assault  Rape
 1:     1D   39.4     808  62.6
 2:     2D   35.3     815  94.3
 3:     3D   22.6     451  67.7
 4:     4D   54.9     898 106.0
 5:     5D   42.4     758 107.6 


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow