R округление времени - PullRequest
       5

R округление времени

2 голосов
/ 18 декабря 2011

У меня есть фрейм данных с серией раз в следующем формате:

08:09:23.079

> class(timer3) 
[1] "factor"

Я хотел бы округлить / преобразовать их в этот формат:

08:09

КонецЦель состоит в том, чтобы использовать их в качестве значений для оси X графика, поэтому я предполагаю, что им нужно будет перейти к какому-либо формату времени (zoo, as.Date и т.1009 *

Ответы [ 4 ]

3 голосов
/ 27 января 2013

С риском быть названным некромантом, я отвечу на этот вопрос, так как думаю, что такая ситуация возникает довольно часто

Вот как это сделать, если вы конвертируете данные временных рядов в формат 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
3 голосов
/ 18 декабря 2011

Предположим, у нас есть эти входные данные:

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)

РЕДАКТИРОВАТЬ: построение и усечение.

2 голосов
/ 18 декабря 2011
as.zoo(sapply(timer3,substring,1,5))
or as.xts?

Возможно, вам поможет более крупная выборка ваших данных.

0 голосов
/ 24 января 2012

Два шага: 1) Коэффициент к символу: as.character () 2) символ к POSIXct: strptime ()

...