Преобразование коэффициента в дату/время в R

Это информация, содержащаяся в моем фрейме данных:

## minuteofday: factor w/ 89501 levels "2013-06-01 08:07:00",...
## dDdt: num 7.8564 2.318 ...
## minutes: POSIXlt, format: NA NA NA

Мне нужно преобразовать минутный столбец дня в формат даты/времени:

minuteave$minutes <- as.POSIXlt(as.character(minuteave$minuteofday), format="%m/%d/%Y %H:%M:%S")

Я пробовал as.POSIXlt, as.POSIXct и as.Date. Ни один из них не работал. У кого-нибудь есть ЛЮБЫЕ мысли.

Цель состоит в том, чтобы отображать минуты против dDdt, но это не позволит мне застроить в указанный период времени, который я хочу как фактор. Я не знаю, что попробовать дальше...

Ответ 1

Вам нужно вставить as.character() перед синтаксическим анализом как Datetime или Date.

Коэффициент всегда возвращается сначала как число, соответствующее его уровню.

Вы можете сохранить преобразование из коэффициента в символ, указав read.csv() и т.д., чтобы не хранить в качестве фактора: stringsAsFactors=FALSE. Вы также можете установить это как глобальную опцию.

Как только у вас есть символ, убедитесь, что вы сопоставляете строку формата с вашими данными:

R> as.POSIXct("2013-06-01 08:07:00", format="%Y-%m-%d %H:%M:%S")
[1] "2013-06-01 08:07:00 CDT"
R> 

Обратите внимание на %Y-%m-%d, который я использовал, в отличие от вашего %m/%d/%y.

Редактировать 3 января 2016 года: теперь это намного проще благодаря пакету anytime, который автоматически преобразуется из многих типов, включая factor и делает это, не требуя строки формата.

R> as.factor("2013-06-01 08:07:00")
[1] 2013-06-01 08:07:00
Levels: 2013-06-01 08:07:00
R> 
R> library(anytime)
R> anytime(as.factor("2013-06-01 08:07:00"))
[1] "2013-06-01 08:07:00 CDT"
R> 
R> class(anytime(as.factor("2013-06-01 08:07:00")))
[1] "POSIXct" "POSIXt" 
R> 

Как вы можете видеть, мы просто передаем переменную фактора в anytime(), а на выходе появляется желаемый тип POSIXct.

Ответ 2

Попробуйте это

library(lubridate) minuteave$minutes <- ymd_hms(minuteave$minutes)

это будет возвращать минутные минуты в качестве объекта POSIXct.

Надеюсь, это поможет вам.