首页 文章

R - 条件变量“工作日”的条件,并用数据框中的特殊“日期”替换

提问于
浏览
0

我有一个大型数据框(下图),我的目的是将日期记录到最后一列 DateToTake

我正在搜索的条件是以变量 weekday 为条件的:

对于从星期一到星期五的工作日,我希望来自同一行的变量 Date 的日期 .

对于"Saturday"我想 Date 2天(以下星期一的日期)

对于"Sunday"我想要 Date 1天(也就是下一个星期一的日期)

(例如在数据框中:对于“星期六”和“星期日”,我想要下一个星期一的日期,在“2007-01-08”下面的情况下)

Date PX_OPEN PX_HIGH PX_LOW PX_LAST PX_VOLUME   weekday DatetoTake
1  2007-01-01      NA      NA     NA      NA        NA    Monday         NA
2  2007-01-02  597.00  602.67 596.83  602.61 107651752   Tuesday         NA
3  2007-01-03  602.73  604.55 601.72  603.79 154028672 Wednesday         NA
4  2007-01-04  601.15  602.49 598.85  601.92 191185072  Thursday         NA
5  2007-01-05  600.05  600.55 595.06  595.40 188421584    Friday         NA
6  2007-01-06      NA      NA     NA      NA        NA  Saturday         NA
7  2007-01-07      NA      NA     NA      NA        NA    Sunday         NA
8  2007-01-08  597.09  598.25 594.73  596.66 158539856    Monday         NA
9  2007-01-09  598.21  601.60 597.22  597.65 183998640   Tuesday         NA
10 2007-01-10  594.93  595.32 590.82  593.39 201679808 Wednesday         NA

有谁知道这如何在R中起作用?

1 回答

  • 1

    这是一个 dplyr 解决方案 .

    tt <- 'Date PX_OPEN PX_HIGH PX_LOW PX_LAST PX_VOLUME   weekday DatetoTake
    1  2007-01-01      NA      NA     NA      NA        NA    Monday         NA
    2  2007-01-02  597.00  602.67 596.83  602.61 107651752   Tuesday         NA
    3  2007-01-03  602.73  604.55 601.72  603.79 154028672 Wednesday         NA
    4  2007-01-04  601.15  602.49 598.85  601.92 191185072  Thursday         NA
    5  2007-01-05  600.05  600.55 595.06  595.40 188421584    Friday         NA
    6  2007-01-06      NA      NA     NA      NA        NA  Saturday         NA
    7  2007-01-07      NA      NA     NA      NA        NA    Sunday         NA
    8  2007-01-08  597.09  598.25 594.73  596.66 158539856    Monday         NA
    9  2007-01-09  598.21  601.60 597.22  597.65 183998640   Tuesday         NA
    10 2007-01-10  594.93  595.32 590.82  593.39 201679808 Wednesday         NA'
    
    library(dplyr)
    df <- read.table(text = tt, header = T, na.strings = 'NA')
    df2 <- df %>%
      mutate(
        DatetoTake = case_when(
          weekday %in% c('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday') ~ as.Date(Date),
          weekday == 'Saturday'~as.Date(Date) + 2,
          weekday == 'Sunday'~as.Date(Date) + 1
          )
      )
    

相关问题