自定義摘要

# example data
DT = data.table(iris)
DT[, Bin := cut(Sepal.Length, c(4,6,8))]

假設我們想要 Sepal.Lengthsummary 函式輸出以及觀察數量:

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 成為列的列表。通常情況下,有些玩弄 cas.list. 就足以找出正確的方法。

將摘要統計資訊分配為新列

我們可能希望在新列中儲存摘要統計資訊,而不是製作彙總表。像往常一樣,我們可以使用:=。例如,

DT[, is_big := .N >= 25, by=.(Species, Bin)]

陷阱

不整潔的資料

如果你發現自己想要解析列名,例如

x.Length/x.Width 的平均值,其中 x 取十個不同的值。

那麼你可能正在檢視嵌入在列名中的資料,這是一個壞主意。閱讀有關整潔的資料 ,然後重塑為長格式。

行總結

資料框和 data.tables 是為表格資料精心設計的,其中行對應於觀察,列對應於變數。如果你發現自己想要總結行,例如

找到每行的列之間的標準差。

那你應該完全使用矩陣或其他一些資料格式。