自定义摘要

# 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 是为表格数据精心设计的,其中行对应于观察,列对应于变量。如果你发现自己想要总结行,例如

找到每行的列之间的标准差。

那你应该完全使用矩阵或其他一些数据格式。