使用dplyr计数和分组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用dplyr计数和分组相关的知识,希望对你有一定的参考价值。
我的目标只是计算每天每小时的记录数。我认为可以使用dplyr
或data.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:子分组(group_by)数据帧上的colSums:优雅