我有一个带有日期变量的[r]大数据框,它反映了该月的第一天.是否可以轻松地创建代表该月最后一天的新数据框日期变量?
以下是一些示例数据:
date.start.month=seq(as.Date("2012-01-01"),length=4,by="months")
df=data.frame(date.start.month)
df$date.start.month
"2012-01-01" "2012-02-01" "2012-03-01" "2012-04-01"
Run Code Online (Sandbox Code Playgroud)
我想返回一个新的变量:
"2012-01-31" "2012-02-29" "2012-03-30" "2012-04-27"
Run Code Online (Sandbox Code Playgroud)
我尝试了以下但是没有成功:
df$date.end.month=seq(df$date.start.month,length=1,by="+1 months")
Run Code Online (Sandbox Code Playgroud)
任何对这个新[r]用户的指导将不胜感激.
Jam*_*mes 33
为了结束月份,您可以创建一个Date包含所有后续月份中的第一个月的向量,并减去1天.
date.end.month <- seq(as.Date("2012-02-01"),length=4,by="months")-1
date.end.month
[1] "2012-01-31" "2012-02-29" "2012-03-31" "2012-04-30"
Run Code Online (Sandbox Code Playgroud)
Boo*_*ops 16
以下是使用lubridate包的另一种解决方案:
date.start.month=seq(as.Date("2012-01-01"),length=4,by="months")
df=data.frame(date.start.month)
library(lubridate)
df$date.end.month <- ceiling_date(df$date.start.month, "month") - days(1)
df$date.end.month
[1] "2012-01-31" "2012-02-29" "2012-03-31" "2012-04-30"
Run Code Online (Sandbox Code Playgroud)
这使用了James上面给出的相同概念,因为它获得了下个月的第一天并减去了一天.
顺便说一句,即使输入日期不一定是该月的第一天,这也会有效.例如,今天是本月的第27个月,它仍然返回正确的月份最后一天:
ceiling_date(Sys.Date(), "month") - days(1)
[1] "2017-07-31"
Run Code Online (Sandbox Code Playgroud)
Mar*_*ink 14
使用timeDate包中的timeLastDayInMonth:
df$eom<-timeLastDayInMonth(df$somedate)
Run Code Online (Sandbox Code Playgroud)
小智 7
library(lubridate)
as.Date("2019-09-01") - days(1)
[1] "2019-08-31"
Run Code Online (Sandbox Code Playgroud)
或者
library(lubridate)
as.Date("2019-09-01") + months(1) - days(1)
[1] "2019-09-30"
Run Code Online (Sandbox Code Playgroud)