自定义摘要
# 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 是为表格数据精心设计的,其中行对应于观察,列对应于变量。如果你发现自己想要总结行,例如
找到每行的列之间的标准差。
那你应该完全使用矩阵或其他一些数据格式。