R - 字符变量的条件"工作日"并替换为特殊"日期"在数据框中

时间:2018-03-27 11:59:30

标签: r if-statement dataframe conditional

我有一个大型数据框(下方),我的目的是让日期进入最后一列DateToTake

我搜索的条件取决于变量weekday

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

对于"星期六"我希望Date + 2天(以下星期一的日期)

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

(例如在数据框中:for" Saturday"" Sunday"我想要下一个星期一的日期,在下面的情况下" 2007-01-08& #34)

         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 个答案:

答案 0 :(得分: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
      )
  )