R: проблема преобразования XTS (добавить х в строке индекса) - PullRequest
0 голосов
/ 10 февраля 2020

Это моя установка: у меня есть файл Excel с почасовыми ценами на электроэнергию. Я хочу проиндексировать их по часовому интервалу, файл здесь: Данные . Я загружаю данные обычным способом.

library(readxl)
library(tidyverse)

rm(list = ls())

DK1 <- read_excel("DK1.xlsx") 
time_index <- as.POSIXct(DK1$Datetime, format="%Y/%m/%d %H:%M:%S", tz=Sys.timezone())
test <- xts(DK1[,-1], order.by = time_index)

Это только один из многих способов, которыми я пытался проиндексировать их в XTS, но безрезультатно. Строка индекса выглядит неправильно, и я не знаю, что делать.

enter image description here

ОБНОВЛЕНИЕ 1: dput (head (DK1)) *

enter image description here

Ответы [ 2 ]

1 голос
/ 10 февраля 2020

Похоже, что read_excel преобразует ваш столбец времени в дату-время, но со всеми датами, установленными в «1899-12-31». Это можно увидеть, выполнив:

> str(DK1)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   8760 obs. of  6 variables:
 $ Date      : POSIXct, format: "2019-01-01" "2019-01-01" "2019-01-01" "2019-01-01"...
 $ Hours     : POSIXct, format: "1899-12-31 00:00:00" "1899-12-31 01:00:00" "1899-12-31 02:00:00" "1899-12-31 03:00:00" ...
 $ Datetime  : chr  "2019-01-01 00:00:00" "2019-01-01 01:00:00" "2019-01-01 02:00:00" "2019-01-01 03:00:00" ...
 $ DK1       : num  211.5 75.2 -30.5 -74 -55.3 ...

Это скорее проблема импорта данных, и Конкат Datetime в Excel может быть выполнен в R. Как правило, все манипуляции с данными выполняются в одном месте.

library(readxl)
library(xts)

DK1 <- read_excel("DK1.xlsx") 
# pasting date and time together in new column name for comparison
# note the use of strftime to remove the date information discussed earlier
DK1$Datetime2 <- paste(DK1$Date, strftime(DK1$Hours, "%H:%M:%S", tz = "UTC"))
# the format / in excel need to change to - for how it's displayed in R
DK1$time_index <- as.POSIXct(DK1$Datetime, format = "%Y-%m-%d %H:%M:%S", tz = Sys.timezone())

# filtering out the NA value of 2019-03-10 02:00:00 which is when daylight savings occurred
DK1 <- DK1[!is.na(DK1$time_index), ]
DK1a <- xts(DK1[, "DK1"], order.by = DK1$time_index)

> head(DK1a)
                       DK1
2019-01-01 00:00:00 211.48
2019-01-01 01:00:00  75.20
2019-01-01 02:00:00 -30.47
2019-01-01 03:00:00 -74.00
2019-01-01 04:00:00 -55.33
2019-01-01 05:00:00 -93.72
0 голосов
/ 10 февраля 2020

Мы можем выбрать столбец цифры c, а затем order.by 'Дата', которая уже является Datetime классом

library(xts)
xts(DK1$DK1, order.by = DK1$Date)

, поскольку format находится в формате по умолчанию, мы не нужно указывать format

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...