& Ldquo; Кусок & Rdquo; временной ряд по фиксированной сумме [дубликат]

Сначала убедитесь, что

  1. вы используете таблицы InnoDB. Поле
  2. для FOREIGN KEY имеет одинаковый тип и длину (!) в качестве исходного поля.

У меня была такая же проблема, и я исправил ее. Я имел unsigned INT для одного поля и просто целое для другого поля.

5
задан Joshua Ulrich 16 March 2013 в 17:18
поделиться

3 ответа

Стандартными функциями для разделения векторов являются cut и findInterval:

v <- as.POSIXct(c(
  "2010-01-13 03:02:38 UTC",
  "2010-01-13 03:08:14 UTC",
  "2010-01-13 03:14:52 UTC",
  "2010-01-13 03:20:42 UTC",
  "2010-01-13 03:22:19 UTC"
))

# Your function return list:
interv(v, as.POSIXlt("2010-01-13 03:00:00 UTC"), 900)
# [[1]]
# [1] "2010-01-13 03:00:00"
# [[2]]
# [1] "2010-01-13 03:00:00"
# [[3]]
# [1] "2010-01-13 03:00:00"
# [[4]]
# [1] "2010-01-13 03:15:00 CET"
# [[5]]
# [1] "2010-01-13 03:15:00 CET"

# cut returns factor, you must provide proper breaks:
cut(v, as.POSIXlt("2010-01-13 03:00:00 UTC")+0:2*900)
# [1] 2010-01-13 03:00:00 2010-01-13 03:00:00 2010-01-13 03:00:00
# [4] 2010-01-13 03:15:00 2010-01-13 03:15:00
# Levels: 2010-01-13 03:00:00 2010-01-13 03:15:00

# findInterval returns vector of interval id (breaks like in cut)
findInterval(v, as.POSIXlt("2010-01-13 03:00:00 UTC")+0:2*900)
# [1] 1 1 1 2 2

Для записи: cut имеет метод для типа POSIXt, но, к сожалению, нет способа укажите аргумент start, эффект:

cut(v,"15 min")
# [1] 2010-01-13 03:02:00 2010-01-13 03:02:00 2010-01-13 03:02:00
# [4] 2010-01-13 03:17:00 2010-01-13 03:17:00
# Levels: 2010-01-13 03:02:00 2010-01-13 03:17:00

Как вы видите, он стартует в 03:02:00. Вы можете объединиться с метками выходного коэффициента (конвертировать метки во время, округлять и преобразовать обратно в символ).

6
ответ дан Marek 26 August 2018 в 08:27
поделиться

Используйте пакет временных рядов . В пакете xts есть функции, специально предназначенные для этого. Или посмотрите на функции агрегата и rollapply в пакете zoo.

В книге rmetrics есть полезное обсуждение, в том числе сравнение производительности различных пакетов: https://www.rmetrics.org/files/freepdf/TimeSeriesFAQ.pdf

Изменить : Посмотрите на мой ответ на этот вопрос . В основном вам нужно усечь каждую временную метку в определенный интервал, а затем выполнить агрегацию с использованием этих новых усеченных временных меток в качестве вашего вектора группировки.

6
ответ дан Community 26 August 2018 в 08:27
поделиться

Это интересный вопрос; с распространением различных пакетов и методов временных рядов, должен быть подход для бининга нерегулярных временных рядов, кроме грубой силы, что предлагает ОП. Вот один «высокоуровневый» способ получить интервалы, которые вы затем можете использовать для aggregate и др., Используя версию cut, определенную для объектов chron.

require(chron)
require(timeSeries)

my.times <- "
2010-01-13 03:02:38 UTC
2010-01-13 03:08:14 UTC
2010-01-13 03:14:52 UTC
2010-01-13 03:20:42 UTC
2010-01-13 03:22:19 UTC
"

time.df <- read.delim(textConnection(my.times),header=FALSE,sep="\n",strip.white=FALSE)
time.seq <- seq(trunc(timeDate(time.df[1,1]),units="hours"),by=15*60,length=nrow(time.df))
intervals <- as.numeric(cut(as.chron(as.character(time.df$V1)),breaks=as.chron(as.character(time.seq))))

Вы get

intervals  
[1] 1 1 1 2 2

, который вы можете теперь добавить к фрейму данных и агрегату.

. Аккуратура с круговым движением выше (от символа к timeDate до символа в chron) немного неудачна, поэтому если есть более чистые решения для бининга нерегулярных данных времени с использованием xts или любого другого пакета timeSeries, я также хотел бы услышать о них! ..

Мне также интересно узнать, что будет наиболее эффективный подход для большого количества высокочастотных нерегулярных временных рядов, например создавая 1-минутную шкалу объема данных тика для очень жидкого запаса.

0
ответ дан Leo Alekseyev 26 August 2018 в 08:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: