我想计算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有点生锈,但是我不知道如何实现这一点,并且搜索互联网也无济于事。
谢谢!
答案 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