我有以下格式的五个日期:
five_dates <- c("2015-04-13 22:56:01 UTC", "2015-04-13 23:00:29 UTC", "2014-04-13 23:01:22 UTC", "2013-04-13 23:01:39 UTC", "2013-04-13 23:01:43 UTC")
使用lubridate
包,我通过执行以下操作来处理它们:
five_dates <- lubridate::ymd_hms(five_dates)
str(five_dates)
[1] POSIXct[1:5], format: "2015-04-13 22:56:01" "2015-04-13 23:00:29" "2014-04-13 23:01:22" "2013-04-13 23:01:39" "2013-04-13 23:01:43"
我想在2013年的日期添加一年:
five_dates <- ifelse(lubridate::year(five_dates) < 2014, five_dates + years(1), five_dates)
但这样做会产生这样的结果:
five_dates
[1] 1428965761 1428966029 1397430082 1397430099 1397430103
如何在2013年为日期添加一年,以便输出也是日期?
答案 0 :(得分:3)
ifelse
删除日期格式。你需要改变它:
five_dates <- as.POSIXct(five_dates, origin="1970-01-01", tz = "UTC")
给出:
> five_dates
[1] "2015-04-13 22:56:01 UTC" "2015-04-13 23:00:29 UTC"
[3] "2014-04-13 23:01:22 UTC" "2014-04-13 23:01:39 UTC"
[5] "2014-04-13 23:01:43 UTC"
ifelse
操作的替代方法,实现了相同的目标:
five_dates <- five_dates + years(as.integer(year(five_dates) < 2014))
给出:
> five_dates
[1] "2015-04-13 22:56:01 UTC" "2015-04-13 23:00:29 UTC"
[3] "2014-04-13 23:01:22 UTC" "2014-04-13 23:01:39 UTC"
[5] "2014-04-13 23:01:43 UTC"
答案 1 :(得分:2)
问题是
remote: GitLab: You are not allowed to push code to protected branches on this project.
。它剥离了属性。
但是,既然您正在使用 lubridate 包,为什么不使用其ifelse()
替换功能来替换年份?有了它,我们可以一起避免year<-
。
ifelse()
或者使用您的代码,您可以在yr <- 2013
year(five_dates[year(five_dates) == yr]) <- yr + 1
five_dates
# [1] "2015-04-13 22:56:01 UTC" "2015-04-13 23:00:29 UTC"
# [3] "2014-04-13 23:01:22 UTC" "2014-04-13 23:01:39 UTC"
# [5] "2014-04-13 23:01:43 UTC"
调用之前获取该类,然后将其分配回来。
ifelse()
示例显示在cl <- class(five_dates)
five_dates <- ifelse(...)
class(five_dates) <- cl
中。但我认为help(ifelse)
会帮助你更多,因为你已经在使用 lubridate 包。