Чтение csv с датой и временем - PullRequest
15 голосов
/ 21 февраля 2012

Я работаю в R и читаю CSV, в первом столбце которого указаны дата и время.Я хочу сначала импортировать этот CSV-файл в R, а затем преобразовать его в zoo obect.

Я использую код в R

EURUSD <- as.xts(read.zoo("myfile.csv",sep=",",tz="",header=T))

Мой CSV-файл содержит данные в формате:

Date,Open,Low,High,Close
2006-01-02 10:01:00,2822.9,2825.45,2822.1,2824.9
2006-01-02 10:02:00,2825,2825.9,2824,2824.95
2006-01-02 10:03:00,2824.55,2826.45,2824,2826.45
2006-01-02 10:04:00,2826.45,2826.45,2824.9,2825.5
2006-01-02 10:05:00,2825.15,2825.5,2824,2824.85
2006-01-02 10:06:00,2824.7,2825.5,2823.7,2823.8
2006-01-02 10:07:00,2823.95,2824.45,2823.55,2824
2006-01-02 10:08:00,2824,2824.85,2823.5,2824.85
2006-01-02 10:09:00,2824.25,2825.45,2824,2825.45
2006-01-02 10:10:00,2825.2,2827,2825,2827

Когда я запускаю указанную выше команду для импорта данныхв RI получить следующую ошибку:

Error in as.POSIXlt.character(x, tz, ...) : 
  character string is not in a standard unambiguous format

Я попытался найти все способы, чтобы разобраться в проблеме.Я читаю так много блогов по сети, но ни один из методов не работает для меня.

Надеюсь, кто-нибудь мне поможет.

Ответы [ 3 ]

9 голосов
/ 01 декабря 2012

Хотя это, кажется, старая статья, но я хочу поделиться своим опытом, так как я прошел похожий очень разочаровывающий процесс, пытаясь загрузить данные CSV временных рядов в R. Проблема выше заключается в том, что Excel изменяет формат даты и времени на следующий %m/%d/%Y %H:%M, в основном он сбрасывает секунды. Если вы читаете файл с этим форматом и у вас есть данные второго разрешения, вы получаете несколько похожих комбинаций даты и времени. поэтому вы не можете просто использовать формат, который игнорирует секунды, потому что он выдает следующее сообщение об ошибке. "строка символов не в стандартном однозначном формате"

Решение состоит в том, чтобы вернуться к Excel и изменить формат столбца даты и времени на %m/%d/%Y %H:%M:%S. Вы можете сделать это, выбрав форматы по умолчанию для ближайшего даты и времени в желаемом формате (в данном случае это %m/%d/%Y %H:%M, а затем вручную добавьте :ss в конце. Сохраните файл как файл CSV, а затем прочитайте его, используя следующую команду команда:

Data<-read.zoo("file.csv", tz="", header=TRUE,format='%m/%d/%Y %H:%M:%S')

Это сработало для меня, и я прочитал файл, содержащий около 900K строк.

5 голосов
/ 21 февраля 2012

Похоже, ошибка связана с тем, что R не распознает, в каком формате находится ваш столбец даты (он не может сработать - дата / месяц / год? Месяц / дата / год? И т. Д.).

Вы можете указать R, в каком формате он используется, используя аргумент format для read.zoo (см. ?strptime, чтобы узнать, какие спецификаторы можно использовать).

Например, если это была дата / месяц / годчасы (24-часовые часы): минуты, которые вы можете сделать:

EURUSD <- as.xts(read.zoo(file_name,
                          sep=',', 
                          tz='',   
                          header=T,
                          format='%d/%m/%Y %H:%M:%S')) # see the 'format' argument?

(Примечание. В вашем вопросе фрагмент данных CSV, который вы показали, не разделен запятой).

0 голосов
/ 07 апреля 2016

Чтение файла без использования as.xtc, когда столбец даты похож на символ.Затем преобразуйте даты в класс POSIXlt с помощью этой функции:

library("chron")
DateConvert<-function(x){
  dt<-strsplit(x,split = "T")
  dt<-unlist(dt)
  d1<-dt[1:length(dt) %% 2==1 ]
  d2<-dt[1:length(dt) %% 2==0 ]
  a<-as.POSIXlt(chron(dates.=d1, times.=d2, format = c(dates = "y-m-d", times = "h:m:s")))
  return(a)
}

DateConvert('Your column')

и просто используйте функцию as.xts для ваших данных.

...