自定義摘要
# example data
DT = data.table(iris)
DT[, Bin := cut(Sepal.Length, c(4,6,8))]
假設我們想要 Sepal.Length
的 summary
函式輸出以及觀察數量:
DT[, c(
as.list(summary(Sepal.Length)),
N = .N
), by=.(Species, Bin)]
# Species Bin Min. 1st Qu. Median Mean 3rd Qu. Max. N
# 1: setosa (4,6] 4.3 4.8 5.0 5.006 5.2 5.8 50
# 2: versicolor (6,8] 6.1 6.2 6.4 6.450 6.7 7.0 20
# 3: versicolor (4,6] 4.9 5.5 5.6 5.593 5.8 6.0 30
# 4: virginica (6,8] 6.1 6.4 6.7 6.778 7.2 7.9 41
# 5: virginica (4,6] 4.9 5.7 5.8 5.722 5.9 6.0 9
我們必須使 j
成為列的列表。通常情況下,有些玩弄 c
,as.list
和 .
就足以找出正確的方法。
將摘要統計資訊分配為新列
我們可能希望在新列中儲存摘要統計資訊,而不是製作彙總表。像往常一樣,我們可以使用:=
。例如,
DT[, is_big := .N >= 25, by=.(Species, Bin)]
陷阱
不整潔的資料
如果你發現自己想要解析列名,例如
取
x.Length/x.Width
的平均值,其中x
取十個不同的值。
那麼你可能正在檢視嵌入在列名中的資料,這是一個壞主意。閱讀有關整潔的資料 ,然後重塑為長格式。
行總結
資料框和 data.tables 是為表格資料精心設計的,其中行對應於觀察,列對應於變數。如果你發現自己想要總結行,例如
找到每行的列之間的標準差。
那你應該完全使用矩陣或其他一些資料格式。