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
)
)
我有一个大数据框(如下),我的目的是将日期放入最后一列 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
)
)