首页 文章

使用dplyr计数和分组

提问于
浏览
0

我的目标只是计算每天每小时的记录数 . 我认为可以使用 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

等等

有什么建议?

3 回答

  • 0

    Base

    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)
    
  • 2

    这似乎可以解决问题:

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

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

    starwars %>% count(gender, species)
    
  • 1

    使用data.table,

    test[, .N, by=.(date, hour)]
    

相关问题