【问题标题】:How to find out how many trading days in each month in R?如何在R中找出每个月有多少个交易日?
【发布时间】:2019-03-31 03:04:48
【问题描述】:

我有一个这样的数据框。时间跨度为10年。因为是中国市场数据,中国有春节。所以每年的西方历法都有不同的假期。

逢节假日,股市不开市,所以是非交易日。周末也是非交易日。

我想知道一年中哪个月的交易日数最少,最重要的是,这个数字是多少。

没有重复的日子。

        date change   open   high    low  close volume
1 1995-01-03 -1.233 637.72 647.71 630.53 639.88 234518
2 1995-01-04  2.177 641.90 655.51 638.86 653.81 422220
3 1995-01-05 -1.058 656.20 657.45 645.81 646.89 430123
4 1995-01-06 -0.948 642.75 643.89 636.33 640.76 487482
5 1995-01-09 -2.308 637.52 637.55 625.04 625.97 509851
6 1995-01-10 -2.503 616.16 617.60 607.06 610.30 606925

【问题讨论】:

  • 你可以用bizdays包检查

标签: r


【解决方案1】:

如果没有重复的天数,您可以按以下方式计算每月和每年的天数:

   library(data.table)                                                                                                                                                                                                                "maxx"))), .Names = c("X2005", "X2006", "X2007", "X2008"))
    library(lubridate)
    dt <- as.data.table(dt)
    dt_days <- dt[, .(count_day=.N), by=.(year(date), month(date))]

那么你只需要这样做就可以得到最小值:

dt_days[count_day==min(count_day)]

【讨论】:

    【解决方案2】:

    chron 和 bizdays 包处理工作日,但实际上都没有包含限制其用途的可用假期日历。
    我们将在下面使用 chron 假设您已经定义了假期日期的.Holidays 向量。 (如果您运行下面的代码而不这样做,则只有工作日将被视为工作日,因为 chron 提供的默认 .Holidays 向量中的日期很少。)DF 有 120 行(每年/每月一行) 和最后一行将其子集到每年只有最少工作日的月份。

    library(chron)
    library(zoo)
    
    st <- as.yearmon("2001-01")
    en <- as.yearmon("2010-12")
    ym <- seq(st, en, 1/12)  # sequence of year/months of interest
    
    # no of business days in each yearmonth
    busdays <- sapply(ym, function(x) {
      s <- seq(as.Date(x), as.Date(x, frac = 1), "day")
      sum(!is.weekend(s) & !is.holiday(s))
    })
    
    # data frame with one row per year/month
    yr <- as.integer(ym)
    DF <- data.frame(year = yr, month = cycle(ym), yearmon = ym, busdays)
    
    # data frame with one row per year
    wx.min <- ave(busdays, yr, FUN = function(x) which.min(x) == seq_along(x))
    DF[wx.min == 1, ]
    

    给予:

        year month  yearmon busdays
    2   2001     2 Feb 2001      20
    14  2002     2 Feb 2002      20
    26  2003     2 Feb 2003      20
    38  2004     2 Feb 2004      20
    50  2005     2 Feb 2005      20
    62  2006     2 Feb 2006      20
    74  2007     2 Feb 2007      20
    95  2008    11 Nov 2008      20
    98  2009     2 Feb 2009      20
    110 2010     2 Feb 2010      20
    

    【讨论】:

      猜你喜欢
      • 2019-08-21
      • 2021-04-10
      • 2020-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-25
      相关资源
      最近更新 更多