在[r]数据框中从日期变量创建月末日期的方法

Mik*_*eTP 27 r date dataframe

我有一个带有日期变量的[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)

  • ```days(1)``` 实际上是不必要的。执行 ```ceiling_date(Sys.Date(), "month") - 1``` 就足够了。只为未来的访客... (8认同)

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)