2

我有一个具有以下格式的一系列时间的数据框:

08:09:23.079

> class(timer3) 
[1] "factor"

我想将它们四舍五入/转换为这种格式:

08:09

最终目标是将它们用作绘图 x 轴的值,因此我假设它们需要采用某种类型的时间格式(动物园、as.Date 等)。

有什么建议么?

4

4 回答 4

3

假设我们有这个输入数据:

DF <- data.frame(times = c("08:09:23.079", "08:30:13.062"), values = 1:2)

为了简单起见,我们假设每分钟最多有一个时间点(我们展示了一个在没有此限制的情况下稍长的替代方案):

library(zoo)
library(chron)

# this assumes we want to store times to the second
tt <- times(as.character(DF$times))
z <- zoo(DF$values, tt)

plot(z, xaxt = "n")

# custom axis - assumes sufficiently many points to get reasonable graph
# round tick mark locations to the minute and remove the seconds from label
axt <- trunc(times(axTicks(1)), "min")
axis(1, at = axt, lab = sub(":..$", "", axt))

上面创建 z 的方法可以替换为这个。无论每分钟是否有超过一个点,它都会起作用,因为它将它们聚合到一分钟:

# with this z we will be store times to the minute
z <- read.zoo(DF, FUN = function(x) trunc(times(as.character(x)), "min"), 
      aggregate = mean)

编辑:绘图和截断。

于 2011-12-18T03:17:19.113 回答
3

冒着被称为死灵法师的风险,我会回答这个问题,因为我认为这种情况经常出现。

如果您将时间序列数据转换为xts格式,请执行以下操作。这里要使用的功能是align.time

> head(GBPJPY)
                    GBPJPY.Open GBPJPY.High GBPJPY.Low GBPJPY.Close
2009-05-01 00:14:59     146.387     146.882    146.321      146.620
2009-05-01 00:29:54     146.623     146.641    146.434      146.579
2009-05-01 00:44:59     146.579     146.908    146.570      146.810
2009-05-01 00:59:59     146.810     146.842    146.030      146.130
2009-05-01 01:14:59     146.130     146.330    146.100      146.315
2009-05-01 01:29:57     146.315     146.382    146.159      146.201
> head(align.time(GBPJPY, 15*60))
                    GBPJPY.Open GBPJPY.High GBPJPY.Low GBPJPY.Close
2009-05-01 00:15:00     146.387     146.882    146.321      146.620
2009-05-01 00:30:00     146.623     146.641    146.434      146.579
2009-05-01 00:45:00     146.579     146.908    146.570      146.810
2009-05-01 01:00:00     146.810     146.842    146.030      146.130
2009-05-01 01:15:00     146.130     146.330    146.100      146.315
2009-05-01 01:30:00     146.315     146.382    146.159      146.201
于 2013-01-27T11:11:13.957 回答
2
as.zoo(sapply(timer3,substring,1,5))
or as.xts?

也许查看更大的数据样本会有所帮助。

于 2011-12-17T23:24:26.720 回答
0

两个步骤: 1) 因子到字符:as.character() 2) 字符到 POSIXct:strptime()

于 2012-01-24T18:16:41.683 回答