2012-02-21 4 views
15

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

Я использую код в 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 получить folowwwing ошибка:

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

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

Я надеюсь, что кто-то мне поможет.

+1

Похоже, что в столбце даты есть что-то, что подталкивает его. Вероятно, блуждающий пробел «-», «,», «n.a.» или что-то типа того. –

+0

Вы уверены, что ваш 'sep' является запятой?ваш пример csv-файла выглядит так, как будто это вкладка? –

+0

Это запятая. Я открываю свой файл csv в блокноте, и он четко показывает разделяемую запятую. – user395882

ответ

5

Похоже, что ошибка связана с тем, что 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 вы показали ISN 't разделен запятой).

+0

Я пробовал использовать read.zoo ("C: /Users/ParamJeet/Desktop/test/eurusd.csv", sep = ",", tz = "", format = " % Y-% m-% d% H:% M ", header = T), но это дает мне ошибку: Ошибка в read.zoo (" C: /Users/ParamJeet/Desktop/test/eurusd.csv ", sep = ",",: индекс имеет 13428 плохих записей в строках данных: 323559 323560 323561 323562 323563 – user395882

+0

Затем посмотрите на эти r ows в вас csv - думаю, у них другой формат. –

+0

, если я открою свой блокнот, он выглядит как Дата, Открыто, Низкое, Высокое, Закрыть 2006-01-02 10: 01: 00,2822.9,2825.45,2822.1,2824.9 Если я открою данные в Excel, то датируется \t Open \t Low \t \t High Закрыть 1/2/2006 10:01 \t 2822,9 \t 2825,45 \t 2822,1 \t 2824,9 1/2/2006 10:02 2825,9 2824,95 Это думаю, что эта разница вызывает проблему. – user395882

8

Хотя это, кажется, старое сообщение, но я хочу поделиться своим опытом, так как я прошел через такой же очень неприятный процесс, пытаясь загрузить временные ряды данных 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 строк.

0

прочитайте файл без использования 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 для данных.

Смежные вопросы