library(lubridate)
get_correct_date <- function(example_date) {
#Split vector on "/" and get 3 components (date, month, year)
vecs <- as.numeric(strsplit(example_date, "\\/")[[1]])
#Check number of days in that month
last_day_of_month <- days_in_month(vecs[2])
#If the input date is higher than actual number of days in that month
#replace it with last day of that month
if (vecs[1] > last_day_of_month)
vecs[1] <- last_day_of_month
#Paste the date components together to get new modified date
dmy(paste0(vecs, collapse = "/"))
}
get_correct_date("31/02/2018")
#[1] "2018-02-28"
get_correct_date("31/04/2018")
#[1] "2018-04-30"
get_correct_date("31/05/2018")
#[1] "2018-05-31"
2条答案
按热度按时间dxxyhpgq1#
我们可以写一个函数,假设你只会有可能比实际日期更高的日期,并且总是具有相同的格式。
字符串
通过小的修改,您可以调整日期,如果他们有不同的格式,甚至如果一些日期小于第一个日期。
crcmnpdw2#
以下是一些基本解决方案:
**1)**使用read.table将部分分为V1,V2和V3,然后在月初创建日期。为此减去一并添加一天。对于问题中的示例,它是前一个月最后一天的31天。
字符串
**2)**如果在无效时想要月底(eom),则以普通方式计算日期,并计算每月的第一天(fom),然后通过向fom添加31来计算月底(eom),添加31以到达下一个月,用cut得到该月的第一个月,减去1得到该月的利息结束。如果用普通方法计算的日期无效,则该月的eom将由pmin接起。
型