我有以下日期的财务时间序列数据格式:"%Y-%m-%d%H:%M:%S"我试图将其时间精度降低到几分钟而不是几秒钟。
示例数据:
dd <- c("2014-02-23","2014-03-12", "2014-05-29")
tt <- c("03:15:52", "03:49:17", "04:03:24", "05:30:19", "05:56:49",
"06:14:04", "09:42:13", "11:57:25", "11:58:02", "12:12:49",
"15:38:00", "15:44:21", "16:16:04")
dt <- c(outer(dd,tt,paste))
xx <- as.xts(seq_along(dt), as.POSIXct(dt))
XX
是用于演示我所做的事情的对象,我试图像这样修复岁差
xx1 <- as.xts(xx,substr(index(xx),1,16),format="%Y-%m-%d %H:%M")
哪个不起作用,然后我在获取所需的片段之前添加了strftime()函数来制作索引字符串。
xx1 <- as.xts(xx,substr(strftime(index(xx)),1,16),format="%Y-%m-%d %H:%M")
那也没有用,我仍然得到包括秒部分在内的完整分辨率。 我想要实现的是:
2014-02-23 03:15
2014-02-23 03:49
2014-02-23 04:03
而不是:
2014-02-23 03:15:52
2014-02-23 03:49:17
2014-02-23 04:03:24
align_time
函数将秒数移动到下一秒,并将精度保持在秒数
答案 0 :(得分:4)
两个问题:
基础类型为POSIXct
,定义为自纪元以来的小数秒,因此您不仅有秒数,还有亚秒数 - 在Windoze上为millis,在操作系统上为微秒以x结尾。所以你“无法摆脱(子)秒”,但你可以查看round()
,它有一个时间对象的方法。
表示与显示不同。即使使用亚秒,您仍然可以按照您希望的格式进行格式化,即显示为文本。
虽然Roland正在提交他的评论我只是在处理您的数据以显示round()
和trunc()
:
R> head(round(index(xx), units="mins"))
[1] "2014-02-23 03:16:00 CST" "2014-02-23 03:49:00 CST"
[3] "2014-02-23 04:03:00 CST" "2014-02-23 05:30:00 CST"
[5] "2014-02-23 05:57:00 CST" "2014-02-23 06:14:00 CST"
R> head(trunc(index(xx), units="mins"))
[1] "2014-02-23 03:15:00 CST" "2014-02-23 03:49:00 CST"
[3] "2014-02-23 04:03:00 CST" "2014-02-23 05:30:00 CST"
[5] "2014-02-23 05:56:00 CST" "2014-02-23 06:14:00 CST"
R>
答案 1 :(得分:2)
strptime(dt, '%Y-%m-%d %H:%M')
#[1] "2014-02-23 03:15:00" "2014-03-12 03:15:00" "2014-05-29 03:15:00" "2014-02-23 03:49:00"
#[5] "2014-03-12 03:49:00" "2014-05-29 03:49:00" "2014-02-23 04:03:00" "2014-03-12 04:03:00"
#[9] "2014-05-29 04:03:00" "2014-02-23 05:30:00" "2014-03-12 05:30:00" "2014-05-29 05:30:00"