Как извлечь дату и время из элемента POSIXct временного ряда, используя мою собственную функцию? - PullRequest
0 голосов
/ 20 апреля 2020

Следующий вопрос по этому вопросу: Как создать функцию, которая определяет порог перемещения вдоль локальных максимумов в R?

Я испробовал решение ThomasIsCoding для 'xts 'объект, как я хочу применить функцию к временному ряду. К сожалению, сохранение его в виде массива не дает дату / время значения. Есть ли простой способ добавить это в функцию? Объект xts на мгновение выглядит следующим образом:

str(ts_1)
An ‘xts’ object on 2018-04-30 23:30:00/2018-08-01 23:30:00 containing:
  Data: num [1:94, 1] 21695 21655 21679 21660 21662 ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr "measured values"
  Indexed by objects of class: [POSIXct,POSIXt] TZ: UTC
  xts Attributes:  
 NULL

Я соответственно изменил функцию:

growthfun<-function (a) {
  r <- c()
  s <- c()
  for (i in seq_along(a)) {
    if (a[i] >= max(a[1:(i-1)])) {
      r <- c(r, as.POSIXct(index(a[i])))
      s <- c(s, a[i])
    }
    else {
      next
    }
  }
  data.frame(row.names=r,s)
}

, что дает:

growthfun(ts_1)
               s
1525131000 21695
1525649400 21722
1525908600 21749
1525995000 21769
1526081400 21788
1526340600 21809

для первых 6 элементов , Я не могу выяснить, почему дата / время индекса не переносятся в формате POSIXct в массив, а преобразуются в эти длинные числовые элементы c. Если бы это было крайне необходимо, я мог бы попытаться привести приводимый пример, но потребовалось несколько шагов, чтобы добраться до временного ряда, поэтому я не вижу элегантного способа сделать это без размещения здесь большого количества текста и кода. Я ценю любую помощь.

1 Ответ

0 голосов
/ 20 апреля 2020

Преобразование секунд с 1 января 1970 года в дату / время.

growthfun<-function (a) {
  r <- c()
  s <- c()
  for (i in seq_along(a)) {
    if (a[i] >= max(a[1:(i-1)])) {
      r <- c(r, as.POSIXct(index(a[i])))
      s <- c(s, a[i])
    }
    else {
      next
    }
  }
  data.frame(row.names=as.POSIXct(r, origin = "1970-01-01", tz = ""), s)
}

growthfun(ts_1)
                           s
2020-04-20 22:31:28 50.13211
2020-04-20 22:44:05 50.23050
2020-04-20 22:53:49 50.42096

Данные :

ts_1 <- structure(c(50.1321122972067, 50.0355467742705, 49.9122834457642, 
49.9948860954217, 50.0397819115463, 50.2304961977954, 49.8852887132391, 
50.420955209067, 50.3734680543285, 50.2443255196795), .Dim = c(10L, 
1L), .Dimnames = list(NULL, NULL), index = structure(c(1587396688, 
1587396699, 1587396846, 1587397205, 1587397420, 1587397445, 1587397972, 
1587398029, 1587398179, 1587398337), tzone = "", tclass = c("POSIXct", 
"POSIXt")), class = c("xts", "zoo"), .CLASS = "double")

                        [,1]
2020-04-20 22:31:28 50.13211
2020-04-20 22:31:39 50.03555
2020-04-20 22:34:06 49.91228
2020-04-20 22:40:05 49.99489
2020-04-20 22:43:40 50.03978
2020-04-20 22:44:05 50.23050
2020-04-20 22:52:52 49.88529
2020-04-20 22:53:49 50.42096
2020-04-20 22:56:19 50.37347
2020-04-20 22:58:57 50.24433
...