如何计算R中每天每个ID的实例数?

时间:2019-10-28 18:05:38

标签: r dataframe dplyr

我想计算R中每个日期的所有唯一ID。但是,我不知道该如何实现。

目前,我有一个看起来像这样的数据集:

ID DateTime
2  2019-10-6
4  2019-10-6
3  2019-10-6
4  2019-10-6
3  2019-10-9
2  2019-10-9
2  2019-10-9

由此,我尝试获取一个数据框以获取以下结果:

ID DateTime    Count
2  2019-10-6   1
3  2019-10-6   1
4  2019-10-6   2
2  2019-10-9   2
3  2019-10-9   1

但是,我尝试了多种使用汇总 aggregate 函数的变体,但是每当尝试它们时,都会出现如下错误:

  Error in UseMethod("summarise_") : 
  no applicable method for 'summarise_' applied to an object of class "Date" 

我的R有点生锈,但是我不知道如何实现这一点,并且搜索互联网也无济于事。

谢谢!

3 个答案:

答案 0 :(得分:3)

使用dplyr轻松解决方案:

library(dplyr)

dates <- c("2019-10-6","2019-10-6","2019-10-6","2019-10-6","2019-10-9","2019-10-9","2019-10-9")
id <- c(2,4,3,4,3,2,2)

dat<-tibble(id,dates)

dat %>%
  count(id,dates)

答案 1 :(得分:3)

(当然)这也可以通过data.table方式完成

dt <- fread("ID DateTime
2  2019-10-6
4  2019-10-6
3  2019-10-6
4  2019-10-6
3  2019-10-9
2  2019-10-9
2  2019-10-9")

dt[, .( count = .N), by = .(ID, DateTime)][]

#    ID  DateTime count
# 1:  2 2019-10-6     1
# 2:  4 2019-10-6     2
# 3:  3 2019-10-6     1
# 4:  3 2019-10-9     1
# 5:  2 2019-10-9     2

答案 2 :(得分:2)

aggregate并不是很难使用,只要记住您需要一些东西来汇总,在下面的情况下,就是数据框的行名。我将dates列强制设置为"Date"类。

dates <- as.Date(c("2019-10-6","2019-10-6","2019-10-6","2019-10-6","2019-10-9","2019-10-9","2019-10-9"))
id <- c(2,4,3,4,3,2,2)

dat<-data.frame(id,dates)
aggregate(row.names(dat) ~ id + dates, dat, length)
#  id      dates row.names(dat)
#1  2 2019-10-06              1
#2  3 2019-10-06              1
#3  4 2019-10-06              2
#4  2 2019-10-09              2
#5  3 2019-10-09              1