Преобразование фрейма данных в xts: проблема с переходом на летнее время и NAs

#r #plot #xts #quantmod

#r #график #xts #quantmod

Вопрос:

Я борюсь с некоторыми базовыми функциями xts. Я читаю файл данных CSV и пытаюсь отобразить данные с candleChart() помощью функции (из пакета quantmod). У меня возникли некоторые проблемы после преобразования моего data.frame в объект xts из-за перехода на летнее время.

По сути, данные являются OHLC из валютной пары EUR / USD за одну минуту. В этом году переход на летнее время был осуществлен 27 марта 2016 года с 02:00 до 03:00 утра. После преобразования data.frame в xts 60 индексов в этом временном окне отсутствуют ( NA ).

Ниже вы найдете код. Я также прикрепил файл данных. Есть ли какой-нибудь простой способ исправить преобразование данных без потери чего-либо?

 forexData <- read.csv(fileName, sep = ".", dec = ",")
#View(forexData)

dataSerie <- xts(forexData[,2:6], order.by=as.POSIXct(forexData[,1], tz=""))

# Checking if data index contains "NA"s and save index where NA are located
index_NA <- which(is.na(index(dataSerie)))

if(length(index_NA) == 0) {
  candleChart(dataSerie, name="First Plot", subset="last 3 weeks", bar.type="ohlc")

} else {
  print("!!! Warning !!! - Data index contains NAs")
}
 

Комментарии:

1. Похоже, что ваши десятичные дроби отформатированы с помощью запятой ( , ); поэтому добавьте dec = "," в свой read.csv вызов : forexData <- read.csv(fileName, sep = ".", dec=",") . Возможно, это не единственная ваша проблема, но, несомненно, это хорошее начало.

2. Спасибо, Абду, на самом деле это была проблема.. Я понял это ou и установил dec на «,» все прошло нормально… но я застрял в следующей проблеме:

3. Пожалуйста, добавьте ошибку из следующей проблемы в свой вопрос, чтобы кто-нибудь мог помочь.

4. Я считываю данные из csv и преобразую их в объект xts () и получаю много преобразований NAs aftre. Данные, похоже, в порядке.. код приведен ниже.. forexData <- read.csv(fileName, sep = ".", dec = ",") dataSerie <- xts(forexData[,2:6], order.by=as.POSIXct(forexData[, 1], tz="", format="%Y-%m-%d %H:%M:%S")) candleChart(dataSerie, name="First Plot", subset="last 3 weeks", bar.type = "ohlc")

5. При попытке построения данных я получаю следующую ошибку: Ошибка в периодичности (x): не удается рассчитать периодичность 1 наблюдения , я думаю, из-за NAs

Ответ №1:

Заголовок вашего CSV:

 TimeUTC.Open.High.Low.Close.Volume
 

Таким образом, столбец timestamp отображается в UTC, в котором нет перехода на летнее время. Поэтому вы должны указать часовой пояс как UTC в своем вызове as.POSIXct :

 dataSerie <- xts(forexData[,2:6], order.by=as.POSIXct(forexData[,1], tz="UTC"))