我有以下数据集:
>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
即。最后一天,上个月和日期对象的年份。
请帮助!
答案 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。
添加其他解决方案。