嗨,我正在尝试创建一个值,该值告诉我下个月的第一个工作日。
首先,我创建一个查找表,列出所有前一个工作日:
closedaylookup <-subset(closedaylookup,month.name =“ March”)
姓名(closedaylookup)<-c(“ month”,“ firstbday”)
closedaylookup
每月第一天
2019年1月1日1月1日
2019年2月2日-02-01
2019年3月3日-03-01
2019年4月4日-04-
2019年5月5日-05-01
2019年6月6日-06-03
2019年7月7日-07-01
2019年8月8日-08-08
2019年9月9日-09-p
2019年10月10日-10-01
2019年11月11日11月1日
2019年12月12日12月12日
然后我为下个月创建一个向量
date_vector <-function(x){ + as.Date(format(x + 32,“%Y-%m-01”))
format(date_vector(Sys.Date()),“%B”)
[1]“三月”
然后我被卡住了,因为我不知道如何构建同时使用date_vector和查找表的向量
我的目标是创建一个值项目,以显示下个月的第一个工作日。我将此用作其他分析的元素
有人可以帮助我吗? 谢谢,
答案 0 :(得分:0)
这里是一种方法:首先在业务日期中添加一个month
号。然后,对于您要查找的任何日期,请先在该日期中添加一个月(使用lubridate中的%m+% months(1)
以免发生过渡,然后使用该日期的月份 加入。这是一个可复制的示例(仅使用问题中的几个日期)。
library(tidyverse)
library(lubridate)
df_close_day <- data.frame(
month = c("January", "Feburary", "March", "April"),
first_biz_day = ymd(c("2019-01-02", "2019-02-01", "2019-03-01", "2019-04-01"))
)
# Add the month so that we can join this later
df_close_day <- df_close_day %>%
mutate(
month_of_first_biz_day = month(first_biz_day)
)
df_dates_to_lookup <- data.frame(
orig_date = ymd(c("2018-12-21", "2019-01-01", "2019-01-31", "2019-02-15"))
)
df_dates_to_lookup %>%
mutate(
next_month = orig_date %m+% months(1),
month_of_next = month(next_month)
) %>%
left_join(
df_close_day, by = c("month_of_next" = "month_of_first_biz_day")
)
#> orig_date next_month month_of_next month first_biz_day
#> 1 2018-12-21 2019-01-21 1 January 2019-01-02
#> 2 2019-01-01 2019-02-01 2 Feburary 2019-02-01
#> 3 2019-01-31 2019-02-28 2 Feburary 2019-02-01
#> 4 2019-02-15 2019-03-15 3 March 2019-03-01
答案 1 :(得分:0)
使用tidyverse
和lubridate
,您可以轻松地处理和合并两个日期列表:
(data_org <- (tibble(org = ymd(c("2018-12-21", "2019-01-01", "2019-01-31", "2019-02-15"))) %>%
mutate(month = month(org),
year = year(org))))
# A tibble: 4 x 3
org month year
<date> <dbl> <dbl>
1 2018-12-21 12 2018
2 2019-01-01 1 2019
3 2019-01-31 1 2019
4 2019-02-15 2 2019
(data_fbd <- tibble(fbd = ymd(c("2019-01-02", "2019-02-01", "2019-03-01", "2019-04-01"))) %>%
mutate(month = month(fbd) - 1, # adapt month to previous month
year = year(fbd)) %>%
mutate(year = case_when(month == 0 ~ year - 1, TRUE ~ year), # adjust year to previous year if previous month is 0 (i.e. 12)
month = case_when(month == 0 ~ 12, TRUE ~ month))) # adjust month to 12 if previous month is 0 (i.e. 12)
# A tibble: 4 x 3
fbd month year
<date> <dbl> <dbl>
1 2019-01-02 12 2018
2 2019-02-01 1 2019
3 2019-03-01 2 2019
4 2019-04-01 3 2019
left_join(data_org, data_fbd)
Joining, by = c("month", "year")
# A tibble: 4 x 4
org month year fbd
<date> <dbl> <dbl> <date>
1 2018-12-21 12 2018 2019-01-02
2 2019-01-01 1 2019 2019-02-01
3 2019-01-31 1 2019 2019-02-01
4 2019-02-15 2 2019 2019-03-01