【问题标题】:Loop over holidays in timeDate package [duplicate]在 timeDate 包中循环假期[重复]
【发布时间】:2017-06-09 02:30:17
【问题描述】:

我想使用library(timeDate) 提取一些假期。我首先使用了以下语法:

EasterSunday<- as.Date(EasterSunday(2015:2018))

EasterSunday
# [1] "2015-04-05" "2016-03-27" "2017-04-16" "2018-04-01"

然后我想在那个日期序列中添加对应的假期:

EasterSunday<- cbind.data.frame(hd=rep('EasterSunday',length(as.Date(EasterSunday(2015:2018)))),date=as.Date(EasterSunday(2015:2018)))

EasterSunday

        #hd            #date

#1 EasterSunday      2015-04-05
#2 EasterSunday      2016-03-27
#3 EasterSunday      2017-04-16
#4 EasterSunday      2018-04-01

然后我想遍历该包中的所有假期:

holidays=c("GoodFriday","EasterSunday","EasterMonday")

# Here I could not find the appropriate function
do.call(cbind, lapply(holidays, function(x) EasterSunday((2015:2018))))

#[,1] [,2] [,3]
#[1,] ?    ?    ?   

【问题讨论】:

    标签: r date datetime


    【解决方案1】:

    使用match.fun

    library(timeDate)
    
    holidays <- c("GoodFriday", "EasterSunday", "EasterMonday")
    
    do.call(rbind,
            lapply(holidays, function(i){
              foo <- match.fun(i)  
              data.frame(Holiday = i,
                         Dates = as.Date(foo(2015:2018)))
    
            }))
    #         Holiday      Dates
    # 1    GoodFriday 2015-04-03
    # 2    GoodFriday 2016-03-25
    # 3    GoodFriday 2017-04-14
    # 4    GoodFriday 2018-03-30
    # 5  EasterSunday 2015-04-05
    # 6  EasterSunday 2016-03-27
    # 7  EasterSunday 2017-04-16
    # 8  EasterSunday 2018-04-01
    # 9  EasterMonday 2015-04-06
    # 10 EasterMonday 2016-03-28
    # 11 EasterMonday 2017-04-17
    # 12 EasterMonday 2018-04-02
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-11
      • 1970-01-01
      • 2015-06-28
      • 2020-08-24
      • 2019-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多