我们可以从每个日期获取月份和年份,并使用aggregate
aggregate(ids~month_year,transform(df,month_year = format(as.Date(edate),"%b-%Y")),length)
# month_year ids
#1 Aug-2018 1
#2 Jul-2018 4
使用lubridate
和dplyr
的另一种方式
library(dplyr)
library(lubridate)
df %>%
mutate(edate = as.Date(edate),year = year(edate),quarter = quarter(edate)) %>%
#Use month to get monthly data
#month = month(edate)) %>%
count(year,quarter)
数据
df <- structure(list(edate = structure(c(3L,2L,4L,1L),.Label = c("2018-07-22","2018-07-24","2018-07-28","2018-08-03"),class = "factor"),ids = 2:6),class = "data.frame",row.names = c(NA,-5L))
,
Base R解决方案:
mthly_summary <- aggregate(list(mthly_tot = df$ids),by = list(mon_year = as.Date(df$edate,"%m-%Y")),sum)
qtrly_summary <- aggregate(list(qtrly_tot = df$ids),by = list(qtr_year = paste(gsub("[-].*","",df$edate),quarters(df$edate),sep = " ")),sum)
Tidyverse解决方案:
df %>%
mutate(qtr = quarters(edate),mon_year = as.Date(edate,"%m-%Y")) %>%
group_by(qtr) %>%
mutate(qtrly_to = sum(ids)) %>%
ungroup() %>%
group_by(mon_year) %>%
mutate(mthly_summary = sum(ids)) %>%
ungroup() %>%
select(-c(ids,edate)) %>%
distinct()
数据(感谢@Ronak Shah):
df <- data.frame(edate = as.Date(c("2018-07-22","%Y-%m-%d"),ids = 2:5)
本文链接:https://www.f2er.com/3167451.html