我有一个大型数据框(下方),我的目的是让日期进入最后一列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中是如何起作用的吗?
答案 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
)
)