使用data.table的简单频率表

时间:2012-08-31 04:31:41

标签: r data.table

我正在寻找一种通过data.table进行简单聚合/计数的方法。

考虑虹膜数据,每个物种有50个观测值。为了计算每个物种的观测数量,我必须在物种以外的列上进行总结,例如“Sepal.Length”。

library(data.table)
dt = as.data.table(iris)
dt[,length(Sepal.Length), Species]

我发现这令人困惑,因为看起来我正在Sepal.Length上做一些事情,乍一看,真的只有物种才重要。

这是我想说的,但我没有得到有效的输出:

dt[,length(Species), Species]

正确的输入和输出,但是笨重的代码:

> dt[,length(Sepal.Length), Species]
Species V1
1:     setosa 50
2: versicolor 50
3:  virginica 50

输入和输出不正确,但代码更好:

> dt[,length(Species), Species]
Species V1
1:     setosa  1
2: versicolor  1
3:  virginica  1

围绕这个有优雅的方式吗?

1 个答案:

答案 0 :(得分:38)

data.table有几个符号可以在j表达式中使用。值得注意的是

  • .N会为您提供每组中的行数。

请参阅?data.table

详细信息下的by
  

高级:按by或按i分组时,符号.SD,.BY和.N可用于j表达式,定义如下。

     

...

     

.N是一个整数,长度为1,包含组中的行数。

例如:

dt[, .N ,by = Species]

     Species  N
1:     setosa 50
2: versicolor 50
3:  virginica 50