34

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

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

4

1 に答える 1

39

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

  • .N各グループの行数が表示されます。

詳細?data.tableの下を参照してくださいby

高度: byi または i でグループ化する場合、次のように定義された j 式でシンボル .SD、.BY、および .N を使用できます。

....

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

例えば:

dt[, .N ,by = Species]

     Species  N
1:     setosa 50
2: versicolor 50
3:  virginica 50
于 2012-08-31T04:36:52.453 に答える