使用 data.table 的简单频率表

问题描述 投票:0回答:2

我正在寻找一种通过 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

有没有一种优雅的方法来解决这个问题?

r data.table
2个回答
39
投票

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

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

详情请参阅

?data.table
下的
by

高级:按

by
或i分组时,j表达式中可以使用符号.SD、.BY和.N,定义如下。

....

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

例如:

dt[, .N ,by = Species]

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

0
投票

更通用的方法是

dt[, table(col2)%>%as.data.frame, col1]

主要优点是列

col1
col2
可以不同,这意味着您可以计算由不同列分组的一列中的频率。

© www.soinside.com 2019 - 2024. All rights reserved.