Почему аргумент colClasses
для data.table::fread
, кажется, не преобразует столбец REQUEST_DATE
в POSIXct
в примере ниже? Он без проблем преобразует колонку ROW_ID
.data.table colClasses преобразование в POSIXct
library(data.table)
txt <- "ROW_ID,REQUEST_TYPE,REQUEST_DATE
1,OTHER,2009-07-31 07:35:38
2,OTHER,2009-07-30 21:18:35
3,OTHER,2009-07-30 21:18:30
4,OTHER,2009-07-30 21:18:40
5,OTHER,2009-07-30 21:18:39
6,QUERY,2009-07-30 21:19:29
7,OTHER,2009-07-30 21:18:42
8,OTHER,2009-07-30 21:18:45
9,OTHER,2009-07-31 07:35:31
10,OTHER,2009-07-31 07:35:30
"
dt <- fread(txt, colClasses = c(ROW_ID = "character", REQUEST_DATE = "POSIXct"))
Типичная конверсия также работает:
dt[, as.POSIXct(REQUEST_DATE)]
[1] "2009-07-31 07:35:38 EDT" "2009-07-30 21:18:35 EDT" "2009-07-30 21:18:30 EDT" "2009-07-30 21:18:40 EDT" "2009-07-30 21:18:39 EDT"
[6] "2009-07-30 21:19:29 EDT" "2009-07-30 21:18:42 EDT" "2009-07-30 21:18:45 EDT" "2009-07-31 07:35:31 EDT" "2009-07-31 07:35:30 EDT"
В данном конкретном случае я не могу сделать dt[, REQUEST_DATE := as.POSIXct(REQUEST_DATE)]
Однако, поскольку реальные данные есть ~ 50m строк и количество столбцов. Альтернативный синтаксис также не похоже на работу:
dt <- fread(txt, colClasses = list(POSIXct = "REQUEST_DATE"))
data.table
помощь fread
говорит «Символ вектор классов (с именем или без имени), а read.csv Или именованный список векторов имен столбцов. или номера, см. примеры. colClasses in fread предназначен для редких переопределений, а не для обычного использования. fread будет только продвигать столбец к более высокому типу, если colClasses запрашивает его. Он не будет понижать колонку до более низкого типа, поскольку NAs Вы должны принуждать такие столбцы впоследствии самостоятельно, если вам действительно нужна потеря данных ».
Непонятно, что POSIXct
считается более низким, чем character
.
Я пользуюсь data.table
версии 1.10.0.
Возможно, документы для colClasses arg необходимо обновить, но они говорят, что они находятся рядом с верхней частью. «Даты читаются как символ в настоящее время. После этого они могут быть преобразованы с использованием превосходного пакета быстрого времени или стандартных базовых функций». – Frank
Действительно, я использую пакет быстрого времени. Он преобразует 50 м строк за 12 секунд, что очень хорошо! – ruser9575ba6f