使用dplyr计数和分组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用dplyr计数和分组相关的知识,希望对你有一定的参考价值。

我的目标只是计算每天每小时的记录数。我认为可以使用dplyrdata.table包找到一个简单的解决方案:

我的数据集非常简单:

> head(test)
        id       date hour
1 14869663 2018-01-24   17
2 14869664 2018-01-24   17
3 14869665 2018-01-24   17
4 14869666 2018-01-24   17
5 14869667 2018-01-24   17
6 14869668 2018-01-24   17

我只需要按两个变量(日期和小时)和计数进行分组。 id并不重要。但是,dplyr中的这两种方法似乎没有产生预期的结果(输入数据长度相同的数据帧,包括数百万条记录,是输出)。我在这做错了什么?

test %>% group_by(date, hour) %>% mutate(count = n())
test %>% add_count(date, hour)

输出看起来像这样

> head(output)
n_records       date hour
1 700      2018-01-24   0
2 750      2018-01-24   1
3 730      2018-01-24   2
4 700      2018-01-24   3
5 721      2018-01-24   4
6 753      2018-01-24   5

等等

有什么建议?

答案

这似乎可以解决问题:

library(dplyr)
starwars %>% 
    group_by(gender, species) %>%
    count

看来(对于Frank来说),count函数可以直接获取分组字段:

starwars %>% count(gender, species)
另一答案

使用data.table,

test[, .N, by=.(date, hour)]
另一答案

基础

aggregate(name ~ gender + species, data = starwars, length)

如果我们想将NAs视为一个群体:

species1 <- factor(starwars$species, exclude = "")
gender1 <- factor(starwars$gender, exclude = "")
aggregate(name ~ gender1 + species1, data = starwars, length)

以上是关于使用dplyr计数和分组的主要内容,如果未能解决你的问题,请参考以下文章

如何根据过滤条件添加计数列而不是在dplyr中进行分组?

dplyr:为什么个人计数摘要和索引摘要有所不同

dplyr:子分组(group_by)数据帧上的colSums:优雅

R语言dplyr包使用dplyr函数使用group_by函数summarise函数和mutate函数计算分组占比实战

与 dplyr 的分组关联(仅适用于控制台)

dplyr:根据不同条件分组,然后返回top n