count 函数计算数据集中列唯一值的数量。利用count可以方便地以表格形式展示变量的数量。本文通过示例说明如何使用该函数。
我们可以单独加载dplyr包,我建议直接加载 tidyverse 包,因为我们还要使用其他特性。
library(tidyverse)
我们加载 tidyverse中的mtcars数据集,利用glimpse函数看下数据概况。
data("mtcars")
glimpse(mtcars)
# Rows: 32
# Columns: 11
# $ mpg 21.0, 21.0, 22.8, 21.4, 18.7, 18.1, 14.3, ~
# $ cyl 6, 6, 4, 6, 8, 6, 8, 4, 4, 6, 6, 8, 8, 8, ~
# $ disp 160.0, 160.0, 108.0, 258.0, 360.0, 225.0, ~
# $ hp 110, 110, 93, 110, 175, 105, 245, 62, 95, ~
# $ drat 3.90, 3.90, 3.85, 3.08, 3.15, 2.76, 3.21, ~
# $ wt 2.620, 2.875, 2.320, 3.215, 3.440, 3.460, ~
# $ qsec 16.46, 17.02, 18.61, 19.44, 17.02, 20.22, ~
# $ vs 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, ~
# $ am 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ~
# $ gear 4, 4, 4, 3, 3, 3, 3, 4, 4, 4, 4, 3, 3, 3, ~
# $ carb 4, 4, 1, 1, 2, 1, 4, 2, 2, 4, 4, 3, 3, 3, ~
我们用了两个参数,数据集mtcars以及要计算的列名:
count(mtcars, cyl)
# cyl n
# 1 4 11
# 2 6 7
# 3 8 14
# mtcars %>% count(cyl)
结果返回数据框包括变量名称及对应数量,举例cyl为4的记录有11条。
使用tidyverse 和 dplyr时,为了更加直观常应用管道符 %>%,mtcars %>% count(cyl),返回结果一致。后面示例我们都使用管道符。
mtcars %>% count(cyl, sort = TRUE)
# cyl n
# 1 8 14
# 2 4 11
# 3 6 7
# 多列计数排序
mtcars %>% count(cyl, gear , sort = TRUE)
# cyl am n
# 1 8 0 12
# 2 4 1 8
# 3 6 0 4
# 4 4 0 3
# 5 6 1 3
# 6 8 1 2
我们也可以利用count函数增加计算列,当然也可以使用mutate函数。下面示例计算平均动力耗油率。
mtcars %>% count(mgp_by_hp=round(mpg/hp,2), sort=TRUE)
# 展示部分结果
# mgp_by_hp n
# 1 0.05 3
# 2 0.06 3
# 3 0.10 3
# 4 0.11 3
# 5 0.19 3
# 6 0.04 1
# 7 0.08 1
# 8 0.09 1
# 9 0.14 1
# 10 0.16 1
前面示例都是计数,我们也可以通过参数wt指定计算权重,请看示例:
mtcars %>% count(cyl, wt=mpg)
# cyl n
# 1 4 293.3
# 2 6 138.2
# 3 8 211.4
mtcars %>% group_by(cyl) %>% summarise(sum(mpg)) %>% add_count()
我们也可以使用分组计算验证结果。
前面示例返回数据框仅指定列及计数n,如果我们要包括所有列并增加指定列的计数,可以使用add_count函数:
mtcars %>% add_count(cyl, sort = TRUE)
# 部分返回数据
# mpg cyl disp hp drat wt qsec vs am gear carb n
# 1 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 14
# 2 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 14
# 3 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 14
# 4 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 14
# 5 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 14
# 6 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 14
# 7 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 14
# 8 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 14
# 9 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 14
# 10 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 14
# 11 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 14
# 12 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2 14
# 13 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 14
# 14 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 14
# 15 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 11
我们看到cyl==8的记录有14条,最后增加n列值为14。