mtcars
データセットを使用しています。特定のデータの組み合わせのレコード数を見つけたい。 SQLのcount(*)
group by句に非常によく似たもの。 ddply()
from plyrは私のために働いています
library(plyr)
ddply(mtcars, .(cyl,gear),nrow)
出力があります
cyl gear V1
1 4 3 1
2 4 4 8
3 4 5 2
4 6 3 2
5 6 4 4
6 6 5 1
7 8 3 12
8 8 5 2
このコードを使用する
library(dplyr)
g <- group_by(mtcars, cyl, gear)
summarise(g, length(gear))
出力があります
length(cyl)
1 32
summarise()
に渡すさまざまな関数を見つけましたが、私にはうまくいかないようです。私が見つけた関数の1つはsum(G)
です。
Error in eval(expr, envir, enclos) : object 'G' not found
n()
を使用して試行しました。
Error in n() : This function should not be called directly
私は何を間違えていますか?どうすればgroup_by()
/summarise()
を取得できますか?
Dplyrには、行をカウントする(潜在的にグループ内に)特別な関数n()
があります。
library(dplyr)
mtcars %>%
group_by(cyl, gear) %>%
summarise(n = n())
#Source: local data frame [8 x 3]
#Groups: cyl [?]
#
# cyl gear n
# (dbl) (dbl) (int)
#1 4 3 1
#2 4 4 8
#3 4 5 2
#4 6 3 2
#5 6 4 4
#6 6 5 1
#7 8 3 12
#8 8 5 2
しかし、dplyrには便利なcount
関数も用意されており、入力が少なくてもまったく同じことができます。
count(mtcars, cyl, gear) # or mtcars %>% count(cyl, gear)
#Source: local data frame [8 x 3]
#Groups: cyl [?]
#
# cyl gear n
# (dbl) (dbl) (int)
#1 4 3 1
#2 4 4 8
#3 4 5 2
#4 6 3 2
#5 6 4 4
#6 6 5 1
#7 8 3 12
#8 8 5 2
別のアプローチは、二重コロンを使用することです:
mtcars %>%
dplyr::group_by(cyl, gear) %>%
dplyr::summarise(length(gear))
別のオプションは、必ずしもエレガントではありませんが、特定の列を参照する必要はありません。
mtcars %>%
group_by(cyl, gear) %>%
do(data.frame(nrow=nrow(.)))
あなたが探しているのは次のとおりだと思います。
cars_by_cylinders_gears <- mtcars %>%
group_by(cyl, gear) %>%
summarise(count = n())
これはdplyrパッケージを使用しています。これは基本的に、docendo discimusが提供するcount()ソリューションの長文版です。