2015-03-27 2 views
0

У меня есть CSV-файл с содержанием, как показано ниже:Как читать файл CSV с такими датами, как ГГГГ-ММ-ДД и время, как ГГГГ-ММ-ДД ЧЧ: ММ: СС?

VA1,VA2,2014-05-24,,2014-05-22 15:50:16 
VA2,VA1,2014-05-24,2014-05-26,2014-05-22 15:50:16 

Как я могу прочитать его? Стандарт read.csv не может распознавать даты YYYY-MM-DD. Я пытался использовать read.zoo, но я не уверен, как:

  1. показывают, что используются два различных форматов даты & времени: YYYY-MM-DD и YYYY-MM-DD HH: MM: SS ;
  2. указывает, что возможны пустые значения.

Вот что я пробовал:

library(zoo) 
colClasses <- c("factor", "factor", "Date", "Date", "Date") 
fmt <- "%Y-%m-%d" 
z <- read.zoo("file.csv", header = FALSE, sep = ",", quote = "", format = fmt, tz = "", colClasses = colClasses) 
+0

Возможные контратип [это] (http://stackoverflow.com/questions/13022299/specify-date-format-for-colclasses-argument-in- read-table-read-csv) или [this] (http://stackoverflow.com/questions/18390674/automatically-detect-date-columns-when-reading-a-file-into-a-data-frame). Однако, возможно, 'fread' +' fasttime' быстрее, чем 'read.table/zoo' взломать. – Henrik

ответ

1

Вы не можете использовать read.zoo для чтения таких данных. Он предназначен для временных рядов. Попробуйте следующее. Никаких пакетов не требуется. Приведенный ниже код был записан как автономный, но часть text = Lines может быть заменена на имя файла, например. read.table("myfile.dat", ...whatever...):

Lines <- "VA1,VA2,2014-05-24,,2014-05-22 15:50:16 
VA2,VA1,2014-05-24,2014-05-26,2014-05-22 15:50:16" 

DF <- read.table(text = Lines, sep = ",", as.is = TRUE, na.strings = "") 
transform(DF, V3 = as.Date(V3), V4 = as.Date(V4), V5 = as.POSIXct(V5)) 

даяние:

V1 V2   V3   V4     V5 
1 VA1 VA2 2014-05-24  <NA> 2014-05-22 15:50:16 
2 VA2 VA1 2014-05-24 2014-05-26 2014-05-22 15:50:16 
0

Вы должны быть в состоянии прочитать таблицу с read.csv, а затем установить колонки 3 и 4 на сегодняшний день и даты и времени объектов с strptime:

Для столбца 3:

data[,3] = as.POSIXct(as.character(data[,3])) 

В колонке 4:

data[,4] = as.POSIXct(as.character(data[,4])) 
+0

Спасибо. Но он возвращает следующее предупреждение: 'Warning В' [<-. Data.frame' ('* tmp *',, "mycolumnname", value = list (sec = c (NA_real_,: предлагается 11 переменных для замены 1 переменной '(не уверен относительно точного перевода En, поскольку мой R возвращает ошибки в локальном lang). В результате значения преобразуются в' numeric'. Но тот же код с 'as.Date' отлично работает и возвращает' Date'. –

+0

OK, my bad, не работает, как с strptime, поскольку объект, который он создает, является списком. Я обновляю ответ на что-то, что работает – xraynaud