将时间序列中的时间精度降低到几分钟

时间:2014-11-08 19:14:04

标签: r xts

我有以下日期的财务时间序列数据格式:"%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函数将秒数移动到下一秒,并将精度保持在秒数

2 个答案:

答案 0 :(得分:4)

两个问题:

  1. 基础类型为POSIXct,定义为自纪元以来的小数秒,因此您不仅有秒数,还有亚秒数 - 在Windoze上为millis,在操作系统上为微秒以x结尾。所以你“无法摆脱(子)秒”,但你可以查看round(),它有一个时间对象的方法。

  2. 表示与显示不同。即使使用亚秒,您仍然可以按照您希望的格式进行格式化,即显示为文本。

  3. 虽然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"