R-字符变量“工作日”的条件;并以特殊的“日期”代替在数据框中 [英] R - Condition on character variable "weekday" and replace with special "date" in a data frame
问题描述
我有一个很大的数据框(如下),我的目的是使日期进入最后一列 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屋!