Skip to main content
 首页 » 编程设计

R语言汇总日期序列数据

2022年07月19日169EasonJim

本文介绍如何处理日期序列数据,并对每天的数据按照月、年进行汇聚。

日期处理

汇聚日期序列数据,即按照一定的日期间隔进行分组汇总。因此需要从日期字段中抽取年、月、日、季度等信息。通常方法通过format函数实现。

#define date 
date <- as.Date("2021-01-25") 
 
#format date 
formatted_date <- format(date, format="%m/%d/%y") 

需要抽取日期期间,通过format参数指定。具体内容读者可以查看帮助。这里介绍lubridate包提供的简单直接的方法抽取。

library(lubridate) 
library(tidyverse) 
df <- tibble(ondate=c("2021-01-01", "2021-04-04" , "2021-07-09"), 
                  sales=c(34, 36, 44)) 
 
df %>% mutate(ondate=ymd(ondate),  
              year =year(ondate),  
              quarter =quarter(ondate), 
              month=month(ondate, label = TRUE), 
              day  =day(ondate), 
              wday =wday(ondate, week_start=1) 
              ) -> df 
df 
 
# A tibble: 3 x 7 
#   ondate     sales  year quarter month   day  wday 
#   <date>     <dbl> <dbl>   <int> <ord> <int> <dbl> 
# 1 2021-01-01    34  2021       1 1月       1     5 
# 2 2021-04-04    36  2021       2 4月       4     7 
# 3 2021-07-09    44  2021       3 7月       9     5 

上面示例中代码非常直接,lubridate较内置format函数优势非常明显。下面我们利用该方法处理日期并进行数据汇聚。

汇聚日期序列数据

**准备数据

set.seed(1) 
 
#create data frame  
ds <- tibble(ondate = as.Date("2020-12-01") + 0:99, 
                 sales = runif(100, 20, 50)) 
head(ds) 
# A tibble: 6 x 2 
#   ondate     sales 
#   <date>     <dbl> 
# 1 2020-12-01  28.0 
# 2 2020-12-02  31.2 
# 3 2020-12-03  37.2 
# 4 2020-12-04  47.2 
# 5 2020-12-05  26.1 
# 6 2020-12-06  47.0 

** 抽取日期

ds %>% mutate(year = year(ondate),  
              quarter = quarter(ondate), 
              month   = month(ondate) 
              ) -> ds 
head(ds) 
 
#   ondate     sales  year quarter 
#   <date>     <dbl> <dbl>   <int> 
# 1 2020-12-01  28.0  2020       4 
# 2 2020-12-02  31.2  2020       4 
# 3 2020-12-03  37.2  2020       4 
# 4 2020-12-04  47.2  2020       4 
# 5 2020-12-05  26.1  2020       4 
# 6 2020-12-06  47.0  2020       4 
 
 

** 汇聚数据

# 按年汇总 
ds %>% group_by(year) %>% summarise(ymean=mean(sales), ysum=sum(sales)) 
#    year ymean  ysum 
#   <dbl> <dbl> <dbl> 
# 1  2020  35.3 1093. 
# 2  2021  35.7 2460. 
 
# 按季度汇总 
ds %>% group_by(quarter) %>% summarise(qmean=mean(sales), qsum=sum(sales)) 
#   quarter qmean  qsum 
#     <int> <dbl> <dbl> 
# 1       1  35.7 2460. 
# 2       4  35.3 1093. 
 
# 按月汇总2021年数据 
ds %>% filter(ondate >='2021-01-01')%>%  
        group_by(month) %>%  
        summarise(mmean=mean(sales), msum=sum(sales)) 
#   month mmean  msum 
#   <dbl> <dbl> <dbl> 
# 1     1  35.6 1105. 
# 2     2  35.2  985. 
# 3     3  37.0  370. 

本文参考链接:https://blog.csdn.net/neweastsun/article/details/122049940
阅读延展