【问题标题】:How to create table extracting month and year如何创建提取月份和年份的表
【发布时间】:2021-01-04 12:14:43
【问题描述】:

我有以下格式的数据

number_of_tickets : "01-01-2019", "02-01-2019", "03-01-2019"......
date              :  1500       ,  1200       , "2000......

这是过去两年的数据,我需要计算每年和每月打开的总票数,如下所示

      Jan     Feb    Mar....
2019  20570   18702  35078

2020  19794   11325  42723......

我正在尝试使用包 lubridatedeplyr 来总结、变异和许多其他事情,但没有取得任何进展。

任何帮助将不胜感激!!!!

谢谢

【问题讨论】:

  • 欢迎来到 SO!您能否发布一个最小可重复的数据示例(请参阅this)?最好具体说明什么是行不通的,而不是仅仅说你做不到

标签: r dplyr


【解决方案1】:

我想你正在寻找这个

df <- data.frame(
  number_of_tickets = c(1500, 1200, 2000, 1000, 2000, 3000),
  date              = c("01-01-2019", "02-01-2019", "03-01-2019",
                        "01-01-2020", "02-01-2020", "03-01-2020"))


df$date <- as.Date(df$date, format = c("%d-%m-%Y"))

head(df)


df$month <- format(df$date, "%m")
df$year  <- format(df$date, "%y")


head(df)


aggregate(number_of_tickets ~ month + year,
          data = df,
          sum)

最后一次调用的输出是

  month year number_of_tickets
1    01   19              4700
2    01   20              6000

HTH

【讨论】:

    【解决方案2】:

    使用 tidyverse 和 lubridate,你也可以继续

    df <- data.frame(
      number_of_tickets = c(1500, 1200, 2000, 1000, 2000, 3000),
      date              = c("01-01-2019", "02-01-2019", "03-02-2019",
                            "01-01-2020", "02-01-2020", "03-02-2020"))
    
    library(lubridate)
    library(tidyverse)
    
    df %>% mutate(month = month(as.Date(date, format = "%d-%m-%Y")),
                  year = year(as.Date(date, format = "%d-%m-%Y"))) %>%
      pivot_wider(id_cols = "year", names_from = month, values_from = number_of_tickets, values_fn = sum)
    
    # A tibble: 2 x 3
       year   `1`   `2`
      <dbl> <dbl> <dbl>
    1  2019  2700  2000
    2  2020  3000  3000
    

    带有 pivottabler

    library(pivottabler)
    library(lubridate)
    
    df$date <- as.Date(df$date, format = "%d-%m-%Y")
    df$Month <- month(df$date)
    df$Year <- year(df$date)
    
    
    qpvt(df, rows = "Month", 
         columns = "Year", 
         calculations = "sum(number_of_tickets)")
    
           2019  2020  Total  
    1      2700  3000   5700  
    2      2000  3000   5000  
    Total  4700  6000  10700
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多