熔化和轉換 data.table
data.table
提供了廣泛的可能性,可以高效,輕鬆地重塑你的資料
例如,在從長到寬重塑時,你可以同時將幾個變數傳遞到 value.var
和 fun.aggregate
引數中
library(data.table) #v>=1.9.6
DT <- data.table(mtcars)
長到寬
dcast(DT, gear ~ cyl, value.var = c("disp", "hp"), fun = list(mean, sum))
gear disp_mean_4 disp_mean_6 disp_mean_8 hp_mean_4 hp_mean_6 hp_mean_8 disp_sum_4 disp_sum_6 disp_sum_8 hp_sum_4 hp_sum_6 hp_sum_8
1: 3 120.100 241.5 357.6167 97 107.5 194.1667 120.1 483.0 4291.4 97 215 2330
2: 4 102.625 163.8 NaN 76 116.5 NaN 821.0 655.2 0.0 608 466 0
3: 5 107.700 145.0 326.0000 102 175.0 299.5000 215.4 145.0 652.0 204 175 599
這將把 gear
設定為索引列,而 mean
和 sum
將針對每個 gear
和 cyl
組合計算 disp
和 hp
。如果某些組合不存在,你可以指定其他引數,例如 na.rm = TRUE
(將傳遞給 mean
和 sum
函式)或指定 builtin fill
引數。你還可以新增邊距,刪除缺失的組合以及資料的子集。在 ?data.table::dcast
中檢視更多資訊
從長到寬
在從寬到長重新整形時,你可以使用正規表示式將列傳遞給 measure.vars
引數
print(melt(DT, c("cyl", "gear"), measure = patterns("^d", "e")), n = 10)
cyl gear variable value1 value2
1: 6 4 1 160.00 16.46
2: 6 4 1 160.00 17.02
3: 4 4 1 108.00 18.61
4: 6 3 1 258.00 19.44
5: 8 3 1 360.00 17.02
---
60: 4 5 2 3.77 5.00
61: 8 5 2 4.22 5.00
62: 6 5 2 3.62 5.00
63: 8 5 2 3.54 5.00
64: 4 4 2 4.11 4.00
這將通過 cyl
和 gear
將資料作為索引列,而以 d
(disp
&drat
)開頭的變數的所有值將出現在 value1
中,並且包含字母 e
的變數的值(qsec
)和 gear
)將出現在 value2
專欄中。
你還可以在指定 variable.name
和 value.name
引數時重新命名結果中的所有列名稱,或者在指定 variable.factor
和 value.factor
引數時決定是否要將 character
列自動轉換為 factor
s。在 ?data.table::melt
中檢視更多資訊