web-dev-qa-db-ja.com

data.tableを使用した単純な度数分布表

Data.tableを介して単純な集計/カウントを行う方法を探しています。

種ごとに50の観測値があるアイリスデータを考えます。種ごとの観測値をカウントするには、種以外の列(たとえば、 "Sepal.Length")で要約する必要があります。

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

一見するとSepal.Lengthで何かをしているように見えるので、本当に混乱するのは、本当に重要なのはSpeciesだけだからです。

これは私が言いたいことですが、有効な出力が得られません。

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

これを回避するエレガントな方法はありますか?

32
geneorama

data.tableには、j式内で使用できるいくつかの記号があります。特に

  • .Nは、各グループの行数を示します。

見る ?data.tableの詳細の下でby

Advanced:byまたはiでグループ化する場合、シンボル.SD、.BY、および.Nをj式で使用できます。

....

.Nは長さ1の整数で、グループ内の行数を含みます。

例えば:

dt[, .N ,by = Species]

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