Суммирование ежедневных данных за месяц с указанием года, связанного с каждым месяцем - PullRequest
0 голосов
/ 04 ноября 2019

Мои данные выглядят так:

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

Так что это дневная запись идентификаторов. В один день может быть несколько записей идентификаторов. Это заголовок фрейма данных. Фактические данные состоят из болеечем 16 тыс. записей, и это увеличивается с каждым днем.

Итак, я хочу, чтобы мой вывод был таким:

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

Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

Base R Solution:

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 solution:

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", "2018-07-24", "2018-07-28", "2018-08-03"), "%Y-%m-%d"), 
                 ids = 2:5)
0 голосов
/ 04 ноября 2019

Мы можем получить месяц и год от каждой даты и использовать 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, 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...