R-字符变量“工作日”的条件;并以特殊的“日期”代替在数据框中 [英] R - Condition on character variable "weekday" and replace with special "date" in a data frame

查看:97
本文介绍了R-字符变量“工作日”的条件;并以特殊的“日期”代替在数据框中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个很大的数据框(如下),我的目的是使日期进入最后一列 DateToTake

I have a large data frame (below) and my intention is to get dates into the last column DateToTake:

我要搜索的条件取决于变量工作日

The condition I'm searching for is conditional on the variable weekday:

从星期一到星期一的工作日星期五,我想要同一行的变量 Date 中的日期。

For weekdays from Monday to Friday I want the dates from the variable Date of the same row.

对于星期六,我希望日期 + 2天(下周一的日期)

For "Saturday" I want the Date + 2 days (date of the following monday)

对于星期日,我希望日期 + 1天(也是下周一的日期)

For "Sunday" I want the Date + 1 day (also the date of the following monday)

(例如,在数据框中:周六和周日 如果要在 2007-01-08以下的情况下,下一个星期一的日期)

(e.g. in the data frame: for "Saturday" and "Sunday" I want the date of the following Monday, in the case below "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中工作吗?

Has anybody an idea how this could work in 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
      )
  )

这篇关于R-字符变量“工作日”的条件;并以特殊的“日期”代替在数据框中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆