假设我们有这个日期"2014-05-11 14:45:00 UTC".我希望在"2013-05-11 14:45:00 UTC"之前获得确切的POSIXct对象1年.
我的第一个想法是创建一个全新的POSIXct对象,方法是从year位中减去一个并将其与字符串的其余部分一起粘贴,然后使用该字符串创建一个新的POSIXct对象,如下所示:
time <- as.POSIXct("2014-05-11 14:45:00 UTC",tz="UTC",origin="1970-01-01")
newTime <- as.POSIXct(paste(as.character(as.numeric(substr(time,1,4)) - 1),substr(time,5,19),sep=""),tz="UTC",origin="1970-01-01")
Run Code Online (Sandbox Code Playgroud)
这工作正常(除了闰年!)但事情是我需要在每个行的大型data.table中执行此操作,并且最好将结果放回data.table中.有没有其他方法可以从这样的物体中减去一年?
一些额外的我需要将它应用于data.table,如下所示:
Time
1: 1349206200
2: 1349207100
3: 1349208000
4: 1349208900
5: 1349209800
6: 1349210700
7: 1349211600
8: 1349212500
9: 1349213400
10: 1349214300
11: 1349215200
Run Code Online (Sandbox Code Playgroud)
但当我这样做时会发生这种情况
SOdata[,Time:=as.numeric(as.POSIXct(paste(as.character(as.numeric(substr(Time,1,4)) - 1),substr(Time,5,19),sep=""),tz="UTC",origin="1970-01-01"))]
Error in as.POSIXlt.character(x, tz, ...) :
character string is not in a standard unambiguous format
Run Code Online (Sandbox Code Playgroud)
我猜我需要使用像lapply这样的东西,但是在使用该函数时我总是搞乱语法.那么有谁知道怎么做?
lubridate 是你的朋友.
library(lubridate)
time <- as.POSIXct("2014-05-11 14:45:00 UTC",tz="UTC",origin="1970-01-01")
time-dyears(1)
#[1] "2013-05-11 14:45:00 UTC"
time+dyears(1)
#[1] "2015-05-11 14:45:00 UTC"
Run Code Online (Sandbox Code Playgroud)
闰年
> x <- as.POSIXct(c("2012-02-28", "2012-02-29"), tz="UTC",origin="1970-01-01")
> x - dyears(1)
[1] "2011-02-28 UTC" "2011-03-01 UTC"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2214 次 |
| 最近记录: |