使用 data.table 進行透視和非透視表格資料 - II

從長格式轉換為寬格式

要恢復上一個示例中的資料,請像這樣使用 dcast

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

這樣可以提供原始寬泛的資料。

             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

此處,公式表示法用於指定形成唯一記錄識別符號(LHS)的列和包含新列名稱(RHS)的類別標籤的列。哪個列用於數值?預設情況下,dcast 使用第一列,其中包含從公式規範中剩餘的數值。要明確,請將引數 value.var 與列名一起使用。

當操作在每個單元格中生成值列表時,dcast 提供了一種 fun.aggregate 方法來處理這種情況。假設我在調查犯罪率時對有類似城市人口的州感興趣。我新增了一個帶有計算資訊的列 Decile

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

現在,施放 Decile ~ Crime 會為每個單元格生成多個值。我可以使用 fun.aggregate 來確定如何處理這些。文字和數值都可以這樣處理。

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

這給出了:

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

這給出了:

             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

城市人口的每個十分位數有多個州。使用 fun.aggregate 指定應如何處理這些。

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

這總結了類似狀態的資料,給出以下內容。

    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