Sök…


Syntax

  • Smält med melt(DT, id.vars=c(..), variable.name="CategoryLabel", value.name="Value")
  • dcast(DT, LHS ~ RHS, value.var="Value", fun.aggregate=sum) med dcast(DT, LHS ~ RHS, value.var="Value", fun.aggregate=sum)

parametrar

Parameter detaljer
id.vars berätta melt vilka kolumner som ska behållas
variable.name berätta melt vad du ska kalla kolumnen med kategoriliketter
value.name berätta melt vad du ska kalla kolumnen som har värden associerade med kategorimärken
value.var berätta för dcast var du hittar värdena som ska kastas i kolumner
formel berätta för dcast vilka kolumner som ska behållas för att bilda en unik postidentifierare (LHS) och vilken som har kategorimärkningarna (RHS)
fun.aggregate ange vilken funktion som ska användas när casting-operationen genererar en lista över värden i varje cell

Anmärkningar

Mycket av det som går till konditioneringsdata för att bygga modeller eller visualiseringar kan åstadkommas med data.table . Jämfört med andra alternativ erbjuder data.table fördelar med snabbhet och flexibilitet.

Pivot och unpivot tabelldata med data.table - I

Konvertera från bred form till lång form

Ladda data USArrests från 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

Använd ?USArrests att ta reda på mer. Konvertera först till data.table . data.frame namn är data.frame i det ursprungliga data.frame .

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

Detta är data i den breda formen. Den har en kolumn för varje variabel. Uppgifterna kan också lagras i lång form utan förlust av information. Den långa formen har en kolumn som lagrar variabelnamnen. Sedan har den en annan kolumn för variabla värden. Den långa formen av USArrests ser ut så.

            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

Vi använder melt att växla från bred form till lång form.

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

Som standard behandlar melt alla kolumner med numeriska data som variabler med värden. I USArrests representerar variabeln UrbanPop den procentuella stadsbefolkningen i en stat. Det skiljer sig från de andra variablerna, Murder , Assault och Rape , som är våldsbrott rapporterade per 100 000 människor. Anta att vi vill behålla UrbanPop kolumnen. Vi uppnår detta genom att ställa in id.vars enligt följande.

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

Observera att vi har angett namnen på kolumnen som innehåller kategorinamn (Mord, attack etc.) med variable.name och kolumnen som innehåller värden med value.name . Våra data ser så ut.

             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

Att generera sammanfattningar med en metod med split-applicera-kombinera stil är en bris. Till exempel, för att sammanfatta våldsbrott av staten?

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

Detta ger:

        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

Pivot och unpivot tabelldata med data.table - II

Konvertera från lång form till bred form

För att återställa data från föregående exempel, använd dcast så sätt.

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

Detta ger informationen i den ursprungliga breda formen.

             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

Här används formelnotationen för att specificera kolumnerna som bildar en unik postidentifierare (LHS) och kolumnen som innehåller kategoritiketter för nya kolumnnamn (RHS). Vilken kolumn ska du använda för numeriska värden? Som standard använder dcast den första kolumnen med numeriska värden som finns kvar från formelspecifikationen. För att uttrycka value.var använder du parametervärdet.var med value.var .

När operationen ger en lista med värden i varje cell, dcast ger en fun.aggregate metod för att hantera situationen. Säg att jag är intresserad av stater med liknande stadsbefolkning när man undersöker brottsfrekvensen. Jag lägger till en kolumn Decile med beräknad information.

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

Nu ger casting Decile ~ Crime flera värden per cell. Jag kan använda fun.aggregate att avgöra hur dessa hanteras. Både text och numeriska värden kan hanteras på detta sätt.

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

Detta ger:

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

Detta ger:

             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

Det finns flera stater i varje decil av stadsbefolkningen. Använd fun.aggregate att specificera hur dessa ska hanteras.

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

Detta summerar uppgifterna för liknande stater, vilket ger följande.

    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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow