Преобразование данных в xts изменяет данные временной метки - PullRequest
0 голосов
/ 22 марта 2019

В настоящее время я занимаюсь исследованием влажности почвы, и мне приходится извлекать почасовые и ежедневные средние из моих данных временного ряда.

Когда я преобразую кадр данных в объект xts, временной ряд меняется, и я не могувыясните, почему.

Данные во фрейме данных выглядят так:

  time                MC temp

1 2018-06-27 11:30:00 17.1 15.8

2 2018-06-27 11:45:00 17.0 15.8

3 2018-06-27 12:00:00 17.0 15.8

4 2018-06-27 12:15:00 17.0 15.9

5 2018-06-27 12:30:00 17.2 15.9

6 2018-06-27 12:45:00 17.0 16.0

Но когда я конвертирую их, отметка времени начинается в 2018-01-09 00:00 и продолжаетсясделать 5-минутные приращения времени.Это код, который я использую:

sm_xts <- xts(sm.data[,2:3], as.Date(sm.data$time))
sm_zoo <- read.zoo(sm.data, index.column = 1)
dat_xts <- as.xts(sm_zoo)

Я уже преобразовал отметку времени в класс as.POSIXct и проверил наличие дубликатов в моем временном ряду.

> anyDuplicated(sm.data$time)
[1] 0

1 Ответ

0 голосов
/ 05 апреля 2019

Возможно, у вас возникли некоторые проблемы с начальным процессом ввода данных.

    df
#                  time   MC temp
# 1 2018-06-27 11:30:00 17.1 15.8
# 2 2018-06-27 11:45:00 17.0 15.8
# 3 2018-06-27 12:00:00 17.0 15.8
# 4 2018-06-27 12:15:00 17.0 15.9
# 5 2018-06-27 12:30:00 17.2 15.9
# 6 2018-06-27 12:45:00 17.0 16.0

Теперь значения даты и времени сохраняются в одной переменной в виде символа

str(df$time)
# chr [1:6] "2018-06-27 11:30:00" "2018-06-27 11:45:00" ...

Давайте преобразуемэто в реальную дату и время, чтобы не терять информацию о времени:

strptime(df$time, "%Y-%m-%d %H:%M:%S")
# [1] "2018-06-27 11:30:00 EEST" "2018-06-27 11:45:00 EEST"
# [3] "2018-06-27 12:00:00 EEST" "2018-06-27 12:15:00 EEST"
# [5] "2018-06-27 12:30:00 EEST" "2018-06-27 12:45:00 EEST"

Похоже, это работает.Возможные проблемы с часовым поясом выходят за рамки этого ответа.

Теперь давайте преобразуем фрейм данных в xts.В готовом xts нам не нужны дата и время в символической форме.Поэтому мы исключаем первый столбец.

df2xts <- xts(df[,2:3], order.by=strptime(df$time, "%Y-%m-%d %H:%M:%S"))
df2xts
#                 time   MC temp
# 1 2018-06-27 11:30:00 17.1 15.8
# 2 2018-06-27 11:45:00 17.0 15.8
# 3 2018-06-27 12:00:00 17.0 15.8
# 4 2018-06-27 12:15:00 17.0 15.9
# 5 2018-06-27 12:30:00 17.2 15.9
# 6 2018-06-27 12:45:00 17.0 16.0
...