Чтение csv с датой и временем
Я работаю в 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
Когда я запускаю указанную выше команду для импорта данных в R, я получаю следующую ошибку:
Error in as.POSIXlt.character(x, tz, ...) :
character string is not in a standard unambiguous format
Я попытался найти все способы разобраться в проблеме. Я читал так много блогов по сети, но ни один из методов не работает для меня.
Я надеюсь, что кто-то мне поможет.
Ответы
Ответ 1
Хотя это, кажется, старый пост, но я хочу поделиться своим опытом, так как я прошел аналогичный очень неприятный процесс, пытаясь загрузить данные 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')
Это сработало для меня, и я прочитал файл, содержащий около 900 тыс. строк.
Ответ 2
Похоже, что ошибка связана с тем, что 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, которые вы показали, не разделен запятыми).
Ответ 3
Прочитайте файл без использования 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 для данных.