У меня есть некоторые данные, которые являются классом символов:
class(solarX[,MEASDATE])
[1] "character"
Что выглядит так:
head(solarX[,MEASDATE])
[1] "1/05/2015 0:00" "1/05/2015 0:30" "1/05/2015 1:00" "1/05/2015 1:30" "1/05/2015 2:00" "1/05/2015 2:30"
Однако я не хочу, чтобы это было в символьном формате, и мне нужно иметь доступ к часам и минутам даты и времени.
Что я пробовал:
strptime(solarX[,MEASDATE], "%d/%m/%Y %H:%M"))
Что отлично работает, это дает мне:
[1] "2015-05-01 00:00:00 AEST" "2015-05-01 00:30:00 AEST" "2015-05-01 01:00:00 AEST" "2015-05-01 01:30:00 AEST" "2015-05-01 02:00:00 AEST"
[6] "2015-05-01 02:30:00 AEST"
class(strptime(solarX[,MEASDATE], "%d/%m/%Y %H:%M"))
[1] "POSIXlt" "POSIXt"
Однако, когда я иду, чтобы увеличить свою исходную таблицу данных, выполнив:
solarX[, date := strptime(solarX[,MEASDATE], "%d/%m/%Y %H:%M")]
(solarX — моя таблица данных)
Я получаю следующее предупреждение:
Warning message:
In `[.data.table`(solarX, , `:=`(date, strptime(solarX[, MEASDATE], :
Supplied 11 items to be assigned to 17568 items of column 'date' (recycled leaving remainder of 1 items)
И возвращенная таблица данных выглядит ужасно:
MEASDATE rrp exp_kwh date
1: 1/05/2015 0:00 33.99299 0 0,0,0,0,0,0,
2: 1/05/2015 0:30 31.53335 0 0,30, 0,30, 0,30,
3: 1/05/2015 1:00 29.37092 0 0,0,1,1,2,2,
4: 1/05/2015 1:30 28.03197 0 1,1,1,1,1,1,
5: 1/05/2015 2:00 26.82800 0 4,4,4,4,4,4,
6: 1/05/2015 2:30 25.22149 0 115,115,115,115,115,115,
Очевидно, я не хочу, чтобы столбец «дата» выглядел так, а чтобы он был заполнен значениями, которые я получил из исходной функции strptime.
solarX
внутриstrptime
- person SymbolixAU   schedule 11.05.2016data.table
не любитPOSIXlt
. Они потребляют огромное количество памяти. Почему неas.POSIXct
? - person MichaelChirico   schedule 11.05.2016data.table
преобразует его вPOSIXct
внутренне (и предупреждает вас, что он это сделал). - person SymbolixAU   schedule 11.05.2016?data.table
:POSIXlt
не поддерживается как тип столбца, потому что он использует 40 байтов для хранения одной даты и времени. Они неявно преобразуются в типPOSIXct
с предупреждением. Вместо этого вас также может заинтересоватьIDateTime
; у него есть методы для преобразования вPOSIXlt
и обратно. - person MichaelChirico   schedule 11.05.2016solarX[, date := strptime(MEASDATE, "%d/%m/%Y %H:%M")]
Warning message: In
[.data.table(solarX, ,
:=(date, strptime(MEASDATE, "%d/%m/%Y %H:%M"))) : Supplied 11 items to be assigned to 17568 items of column 'date' (recycled leaving remainder of 1 items).
Я все еще делаю что-то не так? - person Gin_Salmon   schedule 11.05.2016MEASDATE
, который, кажется, содержит только 11 элементов (даже 6, если вы посмотрите на результатstrptime(solarX[,MEASDATE], "%d/%m/%Y %H:%M"))
по сравнению с 17568, которые находятся в остальных столбцахdata.frame
. - person HubertL   schedule 11.05.2016