R - 条件字符变量 "weekday" 并在数据框中用特殊 "date" 替换

R - Condition on character variable "weekday" and replace with special "date" in a data frame

我有一个大数据框(如下),我的目的是将日期放入最后一列 DateToTake:

我要搜索的条件以变量 weekday:

为条件

对于周一到周五的工作日,我想要同一行的变量 Date 中的日期。

对于 "Saturday" 我想要 Date + 2 天(下周一的日期)

对于"Sunday"我想要Date + 1天(也是下周一的日期)

(例如在数据框中:对于 "Saturday" 和 "Sunday" 我想要下周一的日期,在下面的“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 中如何工作吗?

这是一个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
      )
  )