从日期对象中提取年份的最后日期

时间:2014-02-03 10:55:02

标签: r

我有以下数据集:

>d
x     date
1 1 1-3-2013
2 2 2-4-2010
3 3 2-5-2011
4 4 1-6-2012

我想:

> d
x       date
1 1 31-12-2013
2 2 31-12-2010
3 3 31-12-2011
4 4 31-12-2012

即。最后一天,上个月和日期对象的年份。

请帮助!

4 个答案:

答案 0 :(得分:2)

使用lubridate包的另一个选项:

## using d from Roland answer
transform(d,last =dmy(paste0('3112',year(dmy(date)))))
 x     date       last
1 1 1-3-2013 2013-12-31
2 2 2-4-2010 2010-12-31
3 3 2-5-2011 2011-12-31
4 4 1-6-2012 2012-12-31

答案 1 :(得分:2)

您也可以在LUBRIDATE包中使用 ceiling_date 功能。

你可以做类似的事情 -

library(lubridate)
last_date <- ceiling_date(date,"year") - days(1)

ceiling_date(日期,“年”)为您提供下一年的第一个日期,并获取当前年份的最后一个日期,您将其减去1或天(1)。< / p>

希望这有帮助。

答案 2 :(得分:1)

d <- read.table(text="x     date
1 1 1-3-2013
2 2 2-4-2010
3 3 2-5-2011
4 4 1-6-2012", header=TRUE)

d$date <- as.Date(d$date, "%d-%m-%Y")
d$date <- as.POSIXlt(d$date)
d$date$mon <- 11
d$date$mday <- 31

d$date <- as.Date(d$date)

#  x       date
#1 1 2013-12-31
#2 2 2010-12-31
#3 3 2011-12-31
#4 4 2012-12-31

答案 3 :(得分:0)

1)cut.Date 定义cut_year以提供一年中的第一天。添加366让我们到了明年,然后再次应用cut_year让我们到了明年的第一天。最后减去1得到一年的最后一天。该代码仅使用基本功能。

cut_year <- function(x) as.Date(cut(as.Date(x), "year"))
transform(d, date = cut_year(cut_year(date) + 366) - 1)

2)格式

transform(d, date = as.Date(format(as.Date(date), "%Y-12-31")))

3)动物园一个"yearmon"类变量将日期作为一年加0表示1月,1月12日表示2月,...,12月12日表示12月。它的下限和添加11/12得到一个到十二月,as.Date.yearmon(..., frac = 1)使用月份的最后一个而不是第一个。

library(zoo)
transform(d, date = as.Date(floor(as.yearmon(as.Date(date))) + 11 / 12, frac = 1))

注意:如果知道as.Date已经是{{1},则可以省略cut_year和其他两个解决方案中的内部date }。class。

添加其他解决方案。