Преобразование символьной даты и времени с миллисекундами в числовые в R

У меня есть следующий вектор Timestamp:

Timestamp <- c("30-09-2016 11:45:00.000", "01-10-2016 06:19:57.860", "01-10-2016 06:20:46.393")

Отметка времени является частью таблицы (к сожалению, это не похоже на data.frame...), которая содержит другие столбцы степеней и веса:

  Timestamp Weight Degrees
1 30-09-2016 11:45:00.000 38.19 40.00 
2 01-10-2016 06:19:57.860 39.12 40.00 
3 01-10-2016 06:20:46.393 42.11 41.00

Я хотел бы построить график Weight против Timestamp, но режим Timestamp является «символьным», что означает, что ось x не читается должным образом. Не могли бы вы предложить преобразовать это в числовое?

Я пробовал as.Date(Timestamp,format='%d-%m-%Y %H:%M:%OS3'), но это не работает.


person panajach    schedule 18.04.2017    source источник
comment
@J_F Нужно использовать as.POSIXct, а не as.Date, чтобы сохранить информацию о времени.   -  person nicola    schedule 18.04.2017


Ответы (2)


Как сказал Эрдем, с as.POSIXct с %OS на секунды

t1 <- c("30-09-2016 11:45:00.000", "01-10-2016 06:19:57.860", "01-10-2016 06:20:46.393")     
t2 <- as.POSIXct(t1,format = "%d-%m-%Y  %H:%M:%OS")

обратите внимание, что временные метки по умолчанию отображаются/печатаются в целых секундах; см. digits.secs в ?options

t2
 [1] "2016-09-30 11:45:00 EDT" "2016-10-01 06:19:57 EDT" "2016-10-01 06:20:46 EDT"

но миллисекундное разрешение поддерживается внутри

diff(t2)
 Time differences in secs
 [1] 66897.860    48.533

если вы хотите отобразить/напечатать миллисекундное разрешение, установленное с помощью

options(digits.secs=3)
t2
 [1] "2016-09-30 11:45:00.000 EDT" "2016-10-01 06:19:57.859 EDT" "2016-10-01 06:20:46.392 EDT"
person Chris Holbrook    schedule 18.04.2017

С as.POSIXct

as.POSIXct(Timestamp,format = "%d-%m-%Y  %H:%M:%S.%OS")
person Erdem Akkas    schedule 18.04.2017
comment
Спасибо, но когда я делаю то, что вы предлагаете, миллисекунды обрезаются, поэтому я получаю только › y ‹- as.POSIXct(Timestamp,format = %d-%m-%Y %H:%M:%S.% OS) › y [1] 2016-09-30 11:45:00 CEST 2016-10-01 06:19:57 CEST 2016-10-01 06:20:46 CEST - person panajach; 18.04.2017
comment
здесь могут происходить две вещи; 1) Я думаю, что формат секунд должен быть %OS вместо %S.%OS и 2) напечатанное значение округляется в соответствии с параметрами (цифры.сек) - person Chris Holbrook; 18.04.2017