将每日数据汇总为每月,并与每个月关联的年份

我的数据如下:

  edate          ids 
2018-07-28          2
2018-07-24          3
2018-07-24          4
2018-08-03          5
2018-07-22          6  

所以这是每天输入的id。一天可以有多个id输入。这是数据帧的头。实际数据包含超过16000条记录,并且每天都在增加。

所以我希望我的输出像这样:

Year     Month       Total_Entries
2017      Jan            2
2017      Feb            4
.
.
.
2018      Jan             3
2018      Feb             5

还可以按季度获取数据吗?

Year     Quater      Entries
2017       Q1           25
2017       Q2           20
.
.
2018        Q1           15
zcg345 回答:将每日数据汇总为每月,并与每个月关联的年份

我们可以从每个日期获取月份和年份,并使用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

使用lubridatedplyr的另一种方式

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

大家都在问